用过express 的开发者,想必一定用过中间件。本文就说一下自定义的中间件。
一,先看下中间件的使用。
1访问文件的中间件 express-static
const express = require("express");
const expressStatic = require("express-static");
var app = express();
app.listen(8080);
// 当访问接口的时候,会走下面的操作
// 比如 http://localhost:8080/login?name=zhangsan&age=18
app.get("/login", function (req, res) {
console.log(req.query);
res.send({ok: false, msg: '信息'})
})
// 当访问文件的时候,会走下面的操作
// 比如 http://localhost:8080/a.html
app.use(expressStatic('./www'));
const express = require('express');
const bodyParser = require('body-parser');
var app = express();
app.listen(8080);
app.use(bodyParser.urlencoded({
extended: false,
limit: 2*1024*1024
}))
app.use("/login", function (req, res) {
console.log("body", req.body);
})
如果不用中间件的话,post 请求过来的数据是要自己去处理的,那么使用了中间件后,就会很方便的拿到请求参数。
总的来说中间件的使用就是
app.use(fn); //中间件的函数
app.use("地址", function (req, res) {
// 业务
})
二,自己开发中间件
1 链式操作
app.use("/", function (req, res, next) {
console.log("AAAA");
next();
})
app.use("/", function (req, res, next) {
console.log("BBBB");
})
这样写的话 控制台会先后输出
AAAA
BBBB
那么只要在写 AAAA的地方做一些处理,那么在BBBB里面就可以直接使用AAAA的处理结果。
看下 Express 4.x 的官网
可以可以看到 use 的参数可以只传一个函数体,那么中间件的函数定义就是在这里。
2 自己定义一个post 处理中间件。
const express = require('express');
const querystring = require('querystring');
var app = express();
app.listen(8080);
app.use(function (req, res, next) {
var str = "";
req.on("data", function (data) {
str += data;
});
req.on("end", function () {
// 把数据绑定到 req 对象上,然后在后面就能够使用
req.body = querystring.parse(str);
next();
})
})
app.use("/", function (req, res, next) {
console.log("拿到数据", req.body)
})