我正在创建一个快速中间件。我的 index.js 导出是一个返回 function(req,res,next) {...}
的函数function myMiddleware (options) {
//some stuff with options...
return function middleware(req, res, next) {
//stuff
}
}
module.exports = myMiddleware;
因此用户可以像这样开始使用我的中间件:
var express = require('express'),
myMiddleware = require('my-middleware'),
app = express();
app.use(myMiddleware());
重要的是我必须确保中间件可以访问cookie。当然,我可以自己解析 req.header.cookie ,但是存在一个 cookie 解析器模块可以为我进行解析。
所以我想确保当我的中间件启动时 cookie 解析器中间件已经被使用。我可能可以指示用户首先使用 cookieParser() 但我不喜欢它。
有什么办法可以轻松实现吗?
编辑
我什至可以移植 cookie-parser,因为它不是一个巨大的模块。但这可能是我最不会做的事情,因为它会带来很多我通常不会做的维护工作。
最佳答案
您有两个选择:
如果 req.cookies
未定义,则强制使用 cookie-parser
中间件。
如果 cookie-parser 已经被调用,则该调用将被忽略。请参阅:https://github.com/expressjs/cookie-parser/blob/master/index.js
这种方法的缺点是 cookieParser 中间件只有默认选项。
var cookieParser = require('cookie-parser');
function myMiddleware(options) {
return function(req, res, next) {
return cookieParser()(req, res, function() {
// Your middleware code
return next();
});
}
}
如果 req.cookies
未定义,则发出警告
function myMiddleware(options) {
return function(req, res, next) {
if(!req.cookies) {
// Some warning
}
// Your middleware code
return next();
}
}
关于javascript - NodeJs 和 ExpressJs 中间件依赖于正在使用的另一个中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40891095/