Express: 4.17: 将变量传递给下一个函数 returns 未定义(中间件)

Express: 4.17: Passing the variable to the next function returns undefined (middleware)

问题 我正在尝试将我的变量 req.app.locals.userId 传递给 /getuser 路由。现在,我已经在 req.app.locals.userId 中尝试使用和不使用 app。问题是变量在我的 /getuser 路由中不断返回 undefined 。我已经尝试直接在路由器中 运行 中间件和变量 returns 正确,但是当我将它用作中间件时, req.app.locals 似乎不起作用。 req.app.locals returns 一个对象,这意味着 req.app.locals 有效。

const verifyJWT = (req, res, next) => {
    const token = req.headers["x-access-token"]
    if (!token) {
        res.send("We need a token")
    } else {
        jwt.verify(JSON.parse(token), "jwtSecret", (err, decoded) => {
            if (err) {
                res.json({ auth: false, message: "You failed to authenticate" })
            } else {
                req.app.locals.userId = decoded.id;  //This is the variable I am trying to get
                next();
            }
        })
    }
}
router.route("/getuser", verifyJWT).get((req, res) => {

    console.log(req.app.locals.userId) // <--- Returns undefined


});

我就是看不出我做错了什么。

我的索引文件

const express = require('express');
const cors = require('cors');
const jwt = require('jsonwebtoken');
const bp = require('body-parser');

const auth = require("./routes/auth");

const PORT = process.env.PORT || 3003;
const app = express();

app.use(cors());
app.use(express.json());

app.use("/auth", auth);

app.get("/", (req, res) => {
    console.log("/");
});


app.listen(PORT, () => console.log(`Server started on port ${PORT}`));

处理路由文件后,索引文件和控制器显示正常。

router.route("/getuser", verifyJWT).get((req, res) => {

    console.log(req.app.locals.userId) // <--- Returns undefined


});

而不是尝试获取请求...

  router.get("/getuser", verifyJWT, (req, res, next) => {
     console.log(req.app.locals.userId);
     });

router.route() 只需要 one argument(要匹配的路径)。

相反,使用这样的东西:

router.route('/getuser').use(verifyJWT);

或最等价的:

router.use('/getuser', verifyJWT);