在 上一个实验 中,演示用 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 客户的程序。