Node Web学习笔记(9)-分离服务器模块

路由器的功能模块已经从服务器中分离开了,现在是时候该把服务器功能模块也分离出来了。前面都是通过node serve.js来启动应用,这里我们直接把我们的引用命名为app,启动文件为app.js,服务器就应该干服务器的事情。

目标

通过app.js文件启动,服务器文件模块server.js,路由器文件模块router.js,实现的功能仍然是简单的返回页面,重点内容应该在项目结构以及模块功能上。

实现

1、首先是启动文件,很简单。

1
2
3
//app.js
var server = require("./server");
server.start();

启动服务器,只需要引入服务器模块就行了。

2、然后是服务器模块

1
2
3
4
5
6
7
8
9
10
11
//server.js
var http = require('http');
var router = require("./router");
function start(){
var server = http.createServer(function(req,res){
router.route(req,res);
});
server.listen(8888);
console.log("Your server is started @8888");
}
exports.start = start;

这里我将服务器模块封装在了start方法中,然后exports引出,便于启动文件引用。同时,将reqres对象都当做参数传递给router路由器模块,将判断路劲以及转发功能都交由路由器模块来完成。

3、最后是路由器模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//router.js
var url = require('url');
function route(req,res){
var pathname = url.parse(req.url).pathname;
if(pathname == "/index"){
res.writeHead(200,{"Content-Type":"text/html"});
res.end("This is the index page");
}else if(pathname == "/page1"){
res.writeHead(200,{"Content-Type":"text/html"});
res.end("This is page1");
}else{
res.writeHead(200,{"Content-Type":"text/html"});
res.end("404 Not Fount");
}
}
exports.route = route;

页面很简单不多说,重点在转发逻辑以及文件模块的相互引用上。到这里,上面说到的目标基本上就完成了,那么还有没有什么地方可以进行进一步的改进呢?

思考

路由器既要做判断,还要做转发的功能,如果页面太多的话,势必会影响路由器模块的效率,有没有好的办法可以帮助路由器??

这里有个思路可以解放路由器:路由器只做转发,不做请求处理。那么这样就需要新增加一个处理请求的模块。这里就叫做reqHandler吧,今天就到这了,下面就来实现reqHandler模块了。