带参数的路由 /hello/:name
我们想要在URL中传递一个人的名字name,让NODE应用输出 Hello name! 这里可以使用带参数的路由。
// server.js
...
// 获取router实例
var router = express.Router();
...// 带参数的路由 (http://localhost:8080/hello/:name)
router.get('/hello/:name', function(req, res) {
res.send('hello ' + req.params.name + '!');
});
// 把定义好的路由集成到Node应用中
app.use('/', router);
...
现在我们访问http://localhost:8080/hello/holly就可以看到浏览器页面展示的信息:
Hello holly!
创建参数中间件
如果想要校验上面传入URL的人的名字,确保名字是符合规范的,我们需要在路由中间件中去校验URL中的参数name。它有个特殊的名字,参数中间件。我们可以使用express.param()去创建它。
// server.js
...// 获取router实例
var router = express.Router();
...
// 参数中间件 校验name参数
router.param('name', function(req, res, next, name) {
// 在这里进行校验操作
console.log('doing name validations on ' + name);
// 校验通过我们把校验后的名字赋值给req对象
req.name = name;
// 继续处理request请求,寻找匹配的路由
next();
});
// 带参数的路由 (http://localhost:8080/hello/:name)
router.get('/hello/:name', function(req, res) {
res.send('hello ' + req.name + '!');
});
// 把定义好的路由集成到Node应用中
app.use('/', router);
现在当我们访问到/hello/:name路由,我们编写的参数中间件就会介入并做相应的校验处理。校验通过我们把校验后的名字赋值给req对象,并在相应的.get路由中使用req.name获取校验后的名字。打开浏览器,访问http://localhost:8080/hello/sally,我们可以看到浏览器展示的信息:
Hello sally!
console控制台打印出:
doing name validations on sally
如果你使用RESTful API,你甚至可以校验token是否有效,来判断用户是否有权限访问。
链式路由
我们也可以直接在app对象上创建路由。利用app.route()可以针对一个路由定义多个路由处理函数。例如,对/login路由发起get请求,展示登录界面,同时也可以对/login路由发起post请求,提交登录表单信息。我们就可以使用app.route来创建这个/login路由。
// ROUTES
// ==============================================app.route('/login')
// 展示登录界面 (GET http://localhost:8080/login)
.get(function(req, res) {
res.send('this is the login form');









