中间件:middleware 就是处理http请求的函数。特点:一个中间件处理完,传递给下一个中间件。
每个中间件可以从App实例,接收三个参数,依次为request对象,response对象,next回调函数。每个中间件都可以对http请求进行加工,并且决定是否调用next方法,将request对象再传递给下一个中间件。
1、app.use()方法:
注册中间件
use方法内部可以对访问路径进行判断,据此可以实现简单的路由
2、app.set()方法用于指定变量的值。
app.set("views", __dirname + "/views");
app.set("view engine", "jade");
3、response 对象
response.redirect 方法允许网址的重定向。
response.redirect("/hello/anime");
response.sendFile方法用于发送文件
response.sendFile("/path/to/anime.mp4");
response.render方法用于渲染网页模板
4、request对象
request.ip属性用于获取HTTP请求的IP地址。
request.files用于获取上传的文件
5、Express.Router
5.1Express.Router 是一个构造函数,调用后返回一个路由器实例。然后使用该实例的HTTP动词方法,为不同的访问路径,指向回调函数;最后挂载到某个路径。
var router = express.Router();
router.get("/",function(req,res){
res.send("首页");
});
router.get("/about",function(){
res.send("关于");
});
app.use('/',router);
这种路由器可以自由挂载的做法,为程序带来了更大的灵活性,既可以定义多个路由器实例,也可以将同一个路由器实例挂载到多个路径。
5.2router.route方法
router实例对象route方法,可以接受访问路径作为参数。
var router = express.Router();
router.route('/api').post(function(req,res){
//....
}).get(function(req,res){
//...
})
5.3 router 中间件
use方法为router对象指定中间件,即在数据正式发布给用户之前,对数据进行处理。
router.use(function(req,res,next){
console.log(req.method, req.url);
next();
});
中间件必须放置在HTTP动词方法之前,否则不会执行
5.4 对路径参数的处理
router对象的param方法用于对路径参数的处理
router.param('name', function(req,res,next,name){
//对name进行验证或其他处理
console.log(name);
req.name = name;
next();
});
router.get('/hello/:name', function(req,res){
res.send('hello' + req.name + '!');
})
5.5 app.route
如果app是express的实例对象,app.router实际上就是express.Router的缩写形式,直接挂载到根路径。对同一个路径指定的get和post方法的回调函数,可以写成链式形式。
app.route('/login').get(function(req,res){
}).post(function(req,res){
})