Node.js 路由
我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码。
因此,我们需要查看 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。
我们需要的所有数据都会包含在 request 对象中。但是为了解析这些数据,我们需要额外的 Node.JS 模块,它们分别是 url 和 querystring 模块。
var http = require('http');
var url = require('url');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type' : 'text/html; charset=UTF-8'});
if(request.url != '/favicon.ico'){
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
response.end('');
}
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000');
然后我们访问http://127.0.0.1:8000/login,查看后台输出:
我们的应用现在可以通过请求的 URL 路径来区别不同请求了。
现在我们可以来编写路由了,建立一个名为 router.js 的文件
module.exports = {
login : function(req,res){
res.write('我是login方法');
},
register : function(req,res){
res.write('我是register方法');
}
}
首先,我们来扩展一下之前的代码:
var http = require('http');
var url = require('url');
var router = require('./router');
http.createServer(function(request,response){
response.writeHead(200,{'Content-Type' : 'text/html; charset=UTF-8'});
if(request.url != '/favicon.ico'){
var pathname = url.parse(request.url).pathname;
pathname = pathname.replace(/\//,''); //替换掉前面的'/'
console.log("Request for " + pathname + " received.");
router[pathname](request,response);
response.end('');
}
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000');
我们的HTTP服务器已经在使用路由模块了,并会将请求的路径传递给路由。