node的基本http库,是没有路由的功能的,基本测试get和post就不说了。实现注册路由的功能。
一、server.js
var http = require('http');
var url =require('url'); //url和http都是node.js模块
function start(route,handle) { //route是路由模块,handler是注册的路由的字典
function onRequest(request,response) {
var pathname = url.parse(request.url).pathname;//pathname是请求的路径
route(handle,pathname,request,response); //将这些参数传递给route
}
http.createServer(onRequest).listen(80);
console.log('server running at 80');
}
exports.start = start;
二、route.js
//路由文件
function route(handle,pathname,request,response) {
if (typeof handle[pathname] ==='function') { // 判断注册的路由字典对象中是否有这个函数
return handle[pathname](request,response);
}else{
console.log('no request'+pathname);
return 'NOT found';
}
}
exports.route = route;
三、requestHandlers.js
//处理请求
function start(request,response) {
console.log('do start');
// return "start";
response.writeHead(200,{'Content-Type':'text/plain'});
response.write('start is running');
response.end();
}
function upload(request,response) {
console.log('do upload');
response.writeHead(200,{'Content-Type':'text/plain'});
response.write('upload is running');
response.end();
}
exports.start = start;
exports.upload = upload;
四、index.js
var server = require('./server');
var router =require('./router');
var requestHandlers = require('./requestHandlers');
var handle = {}; // 创建一个空对象,下边是注册路由
handle['/start'] = requestHandlers.start,
handle['/upload'] = requestHandlers.upload;
server.start(router.route,handle); //启动server,同时将路由模块和上边注册的路由对象传进去








网友评论