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);
问题 我正在尝试将我的变量 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);