Node课堂实验手册(四)

上一个实验 中,演示用 Node.JS 构建 HTTP 服务。本次实验,我们将综合前几次实验的结果,构建一个 TODO API 服务。

构建存储模块

在本实验中,我们将首先构建一个分离的存储模块,当然,现在的版本只是在内存保存,但通过这个模块,我们可以隔离具体的存储方式,也就是模拟了在架构中的 DAO 层。

首先,在项目目录中建立一个新的目录,名为:repos

在 repos 中建立一个新的文件,名为: TodoRepos.js, 并使用以下代码:

1
2
3
4
5
6
7
8
9
10
11
function TodoRepos() {

var todos = [{'id':1, 'title':'call tom', desc:''}];


this.getAllTodos = function() {
return this.todos;
}
}

module.exports.TodoRepos = TodoRepos;

建立路由模块

再在项目目录中建立一个名为: route 的目录,并在其中新建一个名为: route.js 的文件,并填入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var events = require('events');

var Route = (function() {

var routeEvent = new events.EventEmitter();

return {

route: function(path, callback) {
routeEvent.on(path, callback);
},

mapping: function(path, req, res, body) {
routeEvent.emit(path, req, res, body);
}
};
})();

exports = module.exports = Route;

创建服务

在项目根目录建立名为: HttpServerTodo.js 的文件,填入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
var path = require('path');
var fs = require('fs');
var Http = require('http');
var route = require('./route/route');
var TodoRepos = require('./repos/todoRepos').TodoRepos;

route.route('/api/login', function(req, res, body) {

console.log('route....login');

res.writeHead(200, {'Content-Type': 'application/json'});
res.end(body.userId);

});

route.route('/api/todos/list', function(req, res, body) {

console.log('route....');

res.writeHead(200, {'Content-Type': 'application/json'});
res.end("hello");

});

var server = Http.createServer(function(req, res) {

let url = req.url;
let method = req.method;
let body = '';
let todoRepos = new TodoRepos();

console.log('Trying to serve %s, mehtod = %s', url, method);

req.on('data', function(chunk) {
console.log('data. chunk = %s', chunk);
body += chunk;
});

req.on('end', function() {
console.log('end. body = %s', body);

var param;

if (body != '') {
param = JSON.parse(body);
}

if (method === 'POST') {

route.mapping(url, req, res, param);

});

});

server.listen(3000);

console.log('The server is startup at 3000');

下一步

下一个实验 中,将演示如何用 Node.JS 写HTTP 客户的程序。

本文标题:Node课堂实验手册(四)

文章作者:梅老师

发布时间:2019年11月09日 - 07:11

最后更新:2020年05月28日 - 16:05

原始链接:https://www.mls-tech.info/node/node-practise-manual-04/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。