如何在中间件中将参数传递给函数

问题描述 投票:0回答:2

所以我想将一个参数传递给中间件,但我在某些方面苦苦挣扎。

我在路由处理程序中有这个功能:

router.get('/users', auth.required, userController.findAll);

然后它将转到调用getTokenFromHeaders的auth函数:

const auth = {
  required: jwt({
    secret: 'secret',
    userProperty: 'payload',
    getToken: getTokenFromHeaders,
  }),
   ...
};

getTokenFromHeaders函数中,检索并检查令牌,它看起来像这样:

const getTokenFromHeaders = (req) => {
...
   return token; // Or null in case it's not there or incorrect

所以我的目标是传递一个像auth.required('role')这样的参数来检查用户在getTokenFromHeaders函数中的角色(定义更多的auth函数也可以(auth.admin,auth.whatever,...)

我已经尝试修改它如下:

const auth = {
  required: jwt({
    secret: 'secret',
    userProperty: 'payload',
    getToken: getTokenFromHeaders(req, res, role),
  }),

但它说req和res没有定义。

有没有办法做到这一点?

javascript node.js express
2个回答
0
投票

get方法接收一个路径和2个回调,其中第一个是中间件:

router.get('/users', auth, userController.findAll);

中间件就像findAll函数一样,在执行之前执行:

var auth = function (req, res) {
    // Get token from header (http://expressjs.com/en/api.html#req.get)
    var token = req.get("myToken");

    // TODO Validate token:
    var isValid = someFunction(token);
    if (!isValid) {
        // ************
        // TODO Check if user can access this resource
        // ************
        res.json("not authorized");
    }

    // Go to findAll (next callback)
};

我建议你看看qazxsw poi,特别是在qazxsw poi,以更好地了解中间件如何在express中工作。


0
投票

我觉得 :

1)请求的呼叫

docs

2)检查身份验证

app.use

3)下一步

app.use('/users', required);

4)userController.findAll

userController.findAll将发送带有恢复参数的响应(req和res)

© www.soinside.com 2019 - 2024. All rights reserved.