程序员

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

2018-07-24  本文已影响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服务器,并将结果在界面上显示出来。

上一篇 下一篇

猜你喜欢

热点阅读