前言
express.js中的中间件是一种处理应用程序中常见功能的强大,优雅的方法。
例如在请求某个接口之前拦截,通过req和res对接口进行处理,通过next()进入下一步。
1.创建一个中间件文件(verifify.js)
鉴权中间件
// 权限校验
function auth(req, res, next) {
const token = req.headers.token;
if (token) {
next();
} else {
res.status(401).send('No permission, please log in');
}
}
exports.auth = auth;
2.路由文件引入外部js文件
var express = require('express');
var router = express.Router();
// 使用require引入外部js文件
// 参数是相对路径
var verifify= require('../verifify.js');
3.配置中间件
var express = require('express');
var router = express.Router();
// 使用require引入外部js文件
// 参数是相对路径
var verifify= require('../verifify.js');
// 中间件设置
const app = express();
// 将中间件传入
app.use(verifify.auth);
4.使用中间件
var express = require('express');
var router = express.Router();
// 使用require引入外部js文件
// 参数是相对路径
var verifify= require('../verifify.js');
// 中间件设置
const app = express();
// 将中间件传入
app.use(verifify.auth);
// 在接口方法之间,添加鉴权中间件
router.get('/list', verifify.auth, function (req, res, next) {
res.json({
code: 200,
data: [],
msg: '成功'
});
});
module.exports = router;
5.中间件携带参数
router.get('/list', verifify.auth('hello'), function (req, res, next) {
res.json({
code: 200,
data: [],
msg: '成功'
});
});
修改verifify.js,并确保不会为同一函数制作多个副本
function auth(params) {
return auth[params] || (auth[params] = function (req, res, next) {
const token = req.headers.token;
if (token) {
next();
} else {
res.status(401).send('No permission, please log in');
}
});
}
exports.auth = auth;
6.遇到问题
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent
to the clientres.send() 或res.json()这类客户端返回的方法一个请求只能返回一次,如果多次返回就会出现这个错误!
如果本篇文章对你有帮助的话,很高兴能够帮助上你。
当然,如果你觉得文章有什么让你觉得不合理、或者有更简单的实现方法又或者有理解不来的地方,希望你在看到之后能够在评论里指出来,我会在看到之后尽快的回复你。