用过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'));
2 处理post 请求,请求数据的处理中间件 body-parser
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)
})