路由和request的处理
路由和request的处理
首先看一个最简单的例子:
var express = require('express')
var app = express();
app.all('/hello/*', function(req,res){
res.send("Welcome to Express");
});
以上表示凡是url能够匹配/hello/*,服务器都将向客户端发送字符串“Welcome to Express",在这里all表示get,post等任何一种请求方式,当然也可以指定为某种特定的请求方式。
下面是另一个例子:
app.get('/', function(req, res){
res.render('index', {
title: 'Express'
});
});
上面的代码意思是,get请求根目录则调用views文件夹中的index模板,并且传入参数title为“Express”,这个title就可以在模板文件中直接使用。
在express中要处理post请求,需要使用app.post()。如下面的代码:
app.post('/add', function(req,res){
res.render('add', {
sum: req.body.a + req.body.b
});
});
除了app.all、app.get、app.post这种形式外,还可以采用:app['get']('/path', function(req,res));这种形式。
其中这两种形式中的function均可以定义在外部,然后引进方法名即可。
welcome = function(req,res){
res.send("Welcome to Express");
}
app.all('/hello/*', welcome);
其中方法welcome要在引用其前定义。
Request处理链
假如存在访问路径/departments/dep1, /departments/dep2等,程序要求需要对符合正则/departments/*的访问路径进行预处理,该如何去做呢?
可以对app对象同时app.all('/departments/*', fun)app.all('/departments/dep1',fun1)(设置顺序不可变),
给方法fun多传递一个参数next,则express框架会自动选择是否还有符合某一访问路径的方法。
fun = function(res, req, next){
.....
next();
}