中间件在接受请求的时间点及正式处理请求到发送响应时点之间提供附加功能。
Express的connect模块提供了中间件框架,通过它可以方便地在全局或路径级别或给单个路由插入中间件功能。
下面是一些由Express支持的中间件组件:
中 间 件 | 说 明 |
---|---|
static | 允许Express服务器以流式处理静态文件的GET请求。这个中间件是Express内置的,它可以通过express.static()访问。 |
express-logger | 实现一个格式化的请求记录器来跟踪对服务器的请求 |
basic-auth-connect | 提供对基本的HTTP身份验证的支持 |
cookie-parser | 你可以从请求读取cookie并在响应中设置cookie |
cookie-session | 提供基于cookie的会话支持 |
body-parser | 把POST请求正文中的JSON数据解析为rep.body属性 |
compression | 对发给客户端的大响应提供Gzip压缩支持 |
csurf | 提供跨站点请求伪造保护 |
1、在全局范围内把中间件分配给某个路径
对所有路由指定中间件,可以在Express app对象上实现use()方法。语法如下:
use([path], middleware)
path变量: 可选,默认值为 ‘/’ ,意味着所有的路径。
middleware参数: 函数,接受三个参数,分别是req、res和next。next是要执行的下一个中间件函数;
每个中间件组件都有一个构造函数,它返回相应的中间件功能;
var express = require(‘express‘);
var bodyParser = require(‘body-parser‘);
var app = express();
app.use(‘/‘, bodyParser()); // 把body-parser中间件分配给所有路径
2、给单个路径分配中间件
var express = require(‘express‘);
var bodyParser = require(‘body-parser‘);
var app = express();
app.get(‘/home‘, bodyParser(), function(req, res) {
res.send(‘This request was logged...‘);
});
app.get(‘/body‘, function(req, res) {
res.send(‘This request was not logged..‘);
});
3、添加多个中间件函数
var express = require(‘express‘),
bodyParser = require(‘body-parser‘),
cookieParser = require(‘cookie-parser‘),
session = require(‘express-session‘);
var app = express();
app.use(‘/‘, bodyParser())
.use(‘‘, cookieParser())
.use(‘‘, session());
注意:
分配函数的顺序就是它们在请求中被应用的顺序。一些中间件函数需要被添加在别的中间件函数前面。
4、使用query中间件
query中间件将一个查询字符串从URL转换为JavaScript对象,并将其保存为Request对象的query属性。
从Express 4.x开始,这个功能在内置请求解析器中存在,而不需要额外的中间件。
下面,是使用query中间件的基本方法:
var express = require(‘express‘);
var app = express();
app.get(‘/‘, function(req, res) {
var id = req.query.id,
score = req.query.score;
console.log( JSON.stringify( req.query ) );
res.send(‘done‘);
});
时间: 2024-11-05 23:20:47