这是我参与「第四届青训营 」笔记创作活动的第16天
Express中间件的五大分类
应用级别的中间件
通过app.use() 或 app.get() 或 app.post() ,绑定到app实例上的中间件,叫做应用级别的中间件。
路由级别的中间件
绑定到**express.Router()**实例上的中间件,叫做路由级别的中间件。它的用法与应用级别的中间件没有任何区别。
只不过,应用级别中间件是绑定到app实例上,路由级别中间件是绑定到Router实例上
错误级别的中间件
专门用来捕获整个项目中发生的异常错误,从而防止项目异常错误,从而防止项目一场崩溃的问题。
格式:错误级别的中间件function处理函数中,必须有4个形参,形参顺序从前到后,分别是(err,req,res,next) 必须放到所有路由后面。
Express内置的中间件
自Express 4.16.0 版本开始,Express内置了3个常用的中间件,极大的提高了Express项目的开发效率和体验
express.static 快速托管静态资源的内置中间件,例如:HTML文件、图片、CSS样式等(无兼容性) express.json解析JSON格式的请求体数据(有兼容性,仅在4.16.0+版本可用) express.urlencoded解析URL-encoded格式的请求体数据(有兼容性,仅在4.16.0+版本可用)
第三方的中间件
非Express官方内置的,而是由第三方开发出来的中间件,可以按需下载并配置第三方中间件,从而提高项目的开发效率。 例:express@4.16.0之前的版本中,经常使用body-parser这个第三方中间件,来解析请求体数据,步骤如下: 1、运行 npm install body-parse r安装中间件 2、使用 require 导入中间件 3、调用 app.use() 注册并使用中间件
express中的中间件
情况一 app.use(static)
static必须是函数
情况二 app.use(static())
static的返回值必须是函数
表示所有路由
app.use(中间件) app.use('/*', 中间件)
顺序
在express4.0中,根据路由条件是否满足,中间件和路由时从上到下,一个一个执行。而在express4.0之前,必须显示的把路由连起来,
跳转或者响应
如果一个中间件既不使用next()使路由跳转到下一个中间件,也不响应数据给客户端,请求就会挂起,导致超时。
morgan简介
morgan是express默认的日志中间件,也可以脱离express,作为node.js的日志组件单独使用。
入门
导入
npm install express morgan
在basic.js加入
var express = require('express');
var app = express();
var morgan = require('morgan');
app.use(morgan('short'));
app.use(function(req, res, next){
res.send('ok');
});
app.listen(3000);
node basic.js运行程序,并在浏览器里访问 http://127.0.0.1:3000
如何将将日志打印到本地文件
可以配置stream
var express = require('express');
var app = express();
var morgan = require('morgan');
var fs = require('fs');
var path = require('path');
var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), {flags: 'a'});
app.use(morgan('short', {stream: accessLogStream}));
app.use(function(req, res, next){
res.send('ok');
});
app.listen(3000);