表示应用层中间件和cookieSession,需要从前面的中间件中加入参数

Express application level middleware and cookieSession, need to add in parameter from prior middleware

我正在尝试将参数从一个中间件传递到下一个中​​间件。第一个中间件只是在 req.cookieKey 中存储一个密钥。第二个中间件使用的是 express 的 cookie-session。通常我会知道该怎么做,但是当我尝试在第二个中间件中 return cookieSession( 时出现问题。请参阅下面的代码和底部链接的 codesandbox.io 示例。

这个中间件排在第一位:

const asyncMiddleware = async (req,res,next) => {
    const data = await SecretKeeper.getCredentialPair('cookie');
    req.cookieKey = data.credential;
    next()
  }

在我的路线中,我正在呼叫:

    //get key from SecretKeeper to encrypt cookie that will be set in next middleware
    app.use(asyncMiddleware);

    //set cookie middleware, use key from SecretKeeper to sign and verify cookie
    app.use((req, res, next) => {

        return cookieSession({
            name: 'MySession',
            keys: [req.cookieKey],

            // Cookie Options
            maxAge: .30 * 60 * 60 * 1000 // 30 min
        })
    })

如果我不尝试从 SecretManager(第一个中间件)添加密钥并且我从第二个中间件中删除额外的功能层 (req, res, next) =>,它就会工作。

我希望我可以使用我之前设置的 req.cookieKey 然后 return cookieSession 函数,但这似乎不起作用。我进行了测试以确保在设置 cookie 中间件时可以获得 req.cookieKey 但由于某种原因我无法使 cookieSession 正常工作。有人有什么建议吗?我已经包含了工作版本,但没有在此处传递参数:https://codesandbox.io/s/l2lw7499q9

cookieSession(options)returnsfunction(req, res, next),所以必须运行它:

app.use((req, res, next) => {

    cookieSession({
        name: 'MySession',
        keys: [req.cookieKey],

        // Cookie Options
        maxAge: .30 * 60 * 60 * 1000 // 30 min
    })(req, res, next) //here
})