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

在上一节中,我们成功显示了医生日程列表,但是列表中的数据是静态的,是在我们程序中写死的,我们现在将把开发服务器端功能,从服务器端获取日程列表数据。要做服务器端的开发,就需要选择服务器端的开发技术,在这里我们将采用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服务器,并将结果在界面上显示出来。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容