美文网首页程序员
随诊医生社区医生版极速开发直播1.4

随诊医生社区医生版极速开发直播1.4

作者: 维康云智能闫涛 | 来源:发表于2018-07-24 15:45 被阅读0次

    在上一节中,我们成功显示了医生日程列表,但是列表中的数据是静态的,是在我们程序中写死的,我们现在将把开发服务器端功能,从服务器端获取日程列表数据。要做服务器端的开发,就需要选择服务器端的开发技术,在这里我们将采用Node来作为服务器端的开发技术,选择Node主要是因为其是现代化的后端开发工具,同时其与前端开发所用的技术一致,都是采用Javascript作为开发语言,如果我们前端网站开发采用React技术的话,前端和后端采用相同技术栈,可以简化开发。

    准备HTTPS开发环境

    我们首先需要的是一个HTTPS的应用服务器,我们知道医院的数据属于相对敏感的数据,我们当然希望其在网络传输过程中的安全,所以我们采用HTTPS协议。
    采用Node来开发HTTPS是一件非常容易的事情,我们首先需要准备CA证书,这个可以到网上去购买,我在这里就用OpenSSL做的开发证书,而不是用购买的证书。这个证书有一个问题,就是如果我们用Chrome等浏览器访问时,会提示证书无效。我们首先来解决这一问题。
    首先重新生成一个Chrome浏览器的桌面快捷方式,然后右键选择属性,在“目标”编辑框中,输入如下内容:

    C:\Users\yantao\AppData\Local\Google\Chrome\Application\chrome.exe --ignore-certificate-errors
    

    点击这个快捷方式启动Chrome时,其会提示有不安全的命令行选择,我们可以选择忽略这个警告。
    首先建立开发目录,这里是wkys,然后在其下建立conf目录,将证书文件:server-key.pem、ca-cert.pem、server-cert.pem拷贝到这个目录下。

    启动文件编写

    我们通过启动程序来启动HTTPS服务器,并将请求路由到不同的处理函数中,index.js的代码如下所示:

    var server = require("./server.js");
    var router = require("./router.js");
    var getServerDefaultHdlr = require("./controller/get_server_default.js");
    
    var handlers = new Object();
    handlers['/'] = getServerDefaultHdlr.processRequest;
    server.startup(router.route, handlers);
    

    其中server.js就是我们要启动的HTTPS服务器,router.js用来将请求的URL解析成规定的格式,从而决定请求路由到哪个函数去处理。handlers定义了请求URL模式与处理函数的对应关系。
    我们先来看router.js的代码:

    var url = require("url");
    
    function route(request, response, handlers) {
        var pathname = url.parse(request.url).pathname;
        console.log("Router: pathname=" + pathname + "!");
        if (typeof handlers[pathname] === "function") {
            handlers[pathname](request, response);
        } else {
            console.log("unknown request:" + pathname + "!");
            response.writeHead(200, {"Content": "text/plain"});
            response.write("Error: unknown request " + pathname + "!");
            response.end();
        }
    }
    
    exports.route = route;
    

    router.js主要工作就是解析出请求中的命令部分,然后调用相应的handler函数来进行具体的处理。

    HTTPS服务器

    定义和启动HTTPS服务器是由server.js来完成,如下所示:

    var https = require("https");
    var http = require("http");
    var fs = require("fs");
    
    var options = {
        key: fs.readFileSync("./conf/server-key.pem"),
        ca: fs.readFileSync("./conf/ca-cert.pem"),
        cert: fs.readFileSync("./conf/server-cert.pem")
    };
    
    
    function startup(route, handlers) {
        console.log("HTTPS Server v0.1 starting up......");
        https.createServer(options, onRequest).listen(9443);
        // http.createServer(onRequest).listen(8443);
        function onRequest(request, response) {
            route(request, response, handlers);
        }
    }
    
    exports.startup = startup;
    

    我们首先装入HTTPS所需的证书到options中,然后以其为参数,启动HTTPS服务器,并监听在9443端口,当接收到请求后,就转到router.js中的route函数,根据请求的URL调用相应的处理函数。

    请求处理函数

    在controller目录下创建get_server_default.js文件:

    var exec = require("child_process").exec;
    
    function processRequest(request, response) {
        console.log("get server default\r\n");
        var options = {};
        options.timeout = 10000;
        options.maxBuffer = 20000 * 1024;
        response.writeHead(200, {"Content-Type": "application/json", "charset": "utf8"});
        var obj = new Object();
        obj.total = 8;
        obj.version = 'v0.0.1';
        obj.build = '299';
        var idx = 0;
        obj.freqDepts = new Array();
        obj.freqDepts[idx++] = "内科";
        obj.freqDepts[idx++] = "外科";
        obj.freqDepts[idx++] = "骨科";
        obj.freqDepts[idx++] = "妇科";
        obj.freqDepts[idx++] = "儿科";
        obj.freqDepts[idx++] = "内分科";
        obj.freqDepts[idx++] = "呼吸科";
        obj.freqDepts[idx++] = "消化科";
        response.write(JSON.stringify(obj));
        response.end();
    }
    
    exports.processRequest = processRequest;
    

    我们在这里指定返回的对象类型是application/json,以JSON形式返回。在浏览器上访问其为返回如下图所示的结果:


    HTTPS服务器访问结果

    在这一节中,我们利用Node搭建了一个最简的HTTPS服务器,并可以通过浏览器访问其内容,在下一节中,我们将通过Flutter来访问这个HTTPS服务器,并将结果在界面上显示出来。

    相关文章

      网友评论

        本文标题:随诊医生社区医生版极速开发直播1.4

        本文链接:https://www.haomeiwen.com/subject/hszemftx.html