Javascript 在express路由器和中间件之间传递数据
我试图编写express中间件来检查授权头中JWT的有效性。这似乎很简单,但我不希望它在所有路由上运行(例如,不在登录/注册路由器上) 因此,我想在路由器声明中指定一条路由应该需要一个有效的令牌。像这样的东西Javascript 在express路由器和中间件之间传递数据,javascript,node.js,express,Javascript,Node.js,Express,我试图编写express中间件来检查授权头中JWT的有效性。这似乎很简单,但我不希望它在所有路由上运行(例如,不在登录/注册路由器上) 因此,我想在路由器声明中指定一条路由应该需要一个有效的令牌。像这样的东西 const controllers = require('../controllers'); module.exports = (app) => { app.post('/auth/signup', controllers.auth.signup.post); a
const controllers = require('../controllers');
module.exports = (app) => {
app.post('/auth/signup', controllers.auth.signup.post);
app.post('/auth/login', controllers.auth.login.post);
app.get('/teams', controllers.teams.get, {requiresToken:true});
};
app.use(middleware({'data' : 'Test'}));
除此之外,.post和.get不接受第三个参数,控制器只接受(req、res、next)参数,因此我看不到为每个路由传递startic数据的方法。我肯定我缺少了一些简单的东西这就是我如何创建一个中间件来将数据传递到
module.exports = function(options) {
return function (req, res, next) {
//write your code here
// here you can access options variable
console.log(options.data)
next();
}
}
您如何称呼中间件是这样的
const controllers = require('../controllers');
module.exports = (app) => {
app.post('/auth/signup', controllers.auth.signup.post);
app.post('/auth/login', controllers.auth.login.post);
app.get('/teams', controllers.teams.get, {requiresToken:true});
};
app.use(middleware({'data' : 'Test'}));
按路线使用
app.post('/userRegistration', middleware({'data' : 'Test'}), (req, res) => {});
您可以使用负查找regexp从该中间件中排除
auth
子例程:
const controllers = require('../controllers');
module.exports = (app) => {
app.use(/\/((?!auth).)*/, yourJwtTokenValidatorMethod); // replace with your jwt token validator middleware
app.post('/auth/signup', controllers.auth.signup.post);
app.post('/auth/login', controllers.auth.login.post);
app.get('/teams', controllers.teams.get, {requiresToken:true});
};
除非我遗漏了什么,否则在实例化中间件时,您可以一次性将数据传递到中间件。不是,每一条路径在实例化路由时?Hi @ JunHoBBS,我更新了答案,添加了<代码>路由基础中间件谢谢,我不完全明白中间件是如何在中间调用一个“AUTH”函数的情况下被明确调用的,但您的回答告诉我,对于每个路由,可以将多个函数链接在一起,这样我就可以为每个路由调用一个auth函数,从外观上看,根本不使用中间件。