Express是一个极简的Node.js后端开发框架,它最强大的地方在于它的路由实现,那么它的路由是如何实现的呢?下面给大家分享两段代码,希望大家能够有个简单的认识。
首先是封装的路由模块
代码语言:javascript复制var url = require('url');
// 封装res.send()方法
function changeRes(res) {
res.send = function (data) {
res.writeHead(200, { "Content-Type": "text/html;charset='utf-8'" });
res.end(data);
}
};
// 定义主服务方法
var Server = function () {
var G = this;
// 处理GET和POST请求
this._get = {};
this._post = {};
var app = function (req, res) {
changeRes(res);
// 获取路由
var pathname = url.parse(req.url).pathname;
// 处理URL路由,将结尾加上'/',与注册方法统一
if (!pathname.endsWith('/')) {
pathname = pathname '/';
};
// 获取请求的方式,GET和POST请求
var method = req.method.toLowerCase();
// 判断方法是否存在
if (G['_' method][pathname]) {
// 执行POST请求
if (method == 'post') {
var postStr = '';
req.on('data', function (chunk) {
postStr = chunk;
});
req.on('end', function (err, chunk) {
req.body = postStr;
G['_' method][pathname](req, res);
});
// 执行GET请求
} else {
G['_' method][pathname](req, res);
};
} else {
res.end('no router');
};
};
// 定义一个GET方法为所有的GET请求注册
app.get = function (string, callback) {
// 将请所有注册路由前后加上'/'
if (!string.endsWith('/')) {
string = string '/';
};
if (!string.startsWith('/')) {
string = '/' string;
};
G._get[string] = callback;
};
// 定义一个POST方法为所有的POST请求注册
app.post = function (string, callback) {
// 将请所有注册路由前后加上'/'
if (!string.endsWith('/')) {
string = string '/';
};
if (!string.startsWith('/')) {
string = '/' string;
};
G._post[string] = callback;
};
return app;
}
module.exports = Server();
下面是引入路由并使用。
代码语言:javascript复制var http=require('http');
var ejs=require('ejs');
// 引入封装的路由
var app=require('express-route.js');
http.createServer(app).listen(3000);
// 注册首页的路由(方法)
app.get('/',function(req,res){
var msg='这是数据库的数据'
ejs.renderFile('views/index.ejs',{msg:msg},function(err,data){
res.send(data);
})
});
// 注册login的路由(方法)
app.get('/login',function(req,res){
console.log('login');
ejs.renderFile('views/form.ejs',{},function(err,data){
res.send(data);
})
});
// 注册dologin的路由(方法)
app.post('/dologin',function(req,res){
console.log(req.body);
res.send("<script>alert('登录成功');history.back();</script>");
})