创建参数中间件
如果想要校验上面传入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'); }) // 提交登录表单 (POST http://localhost:8080/login) .post(function(req, res) { console.log('processing'); res.send('processing the login form!'); }); ...
总结
使用Express 4.0中的路由,我们可以更灵活的定义路由: