[英]Object is undefined, but when I console.log them always "works" Node.js express
當我試圖在我的快速中間件中解構 object 時:
const checkIfLoggedIn = (req, res, next) => {
try {
const { token } = req.cookies['jwt-auth'];
console.log('token: ', token);
req.token = jwt.verify(token, SECRET);
next();
} catch (err) {
console.error(err);
res
.status(401)
.json({
ok: false,
message: 'ERROR: you need to be logged in'
});
}
}
我的應用打印這個:
TypeError: Cannot destructure property 'token' of 'req.cookies.jwt-auth' as it is undefined.
at checkIfLoggedIn (/home/bader/Projects/be_productive/services/authorization.middleware.js:8:17)
at Layer.handle [as handle_request] (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:328:13)
at /home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:286:9
at Function.process_params (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:346:12)
at next (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:280:10)
at cookieParser (/home/bader/Projects/be_productive/node_modules/.pnpm/cookie-parser@1.4.6/node_modules/cookie-parser/index.js:57:14)
at Layer.handle [as handle_request] (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:328:13)
at /home/bader/Projects/be_productive/node_modules/.pnpm/express@4.18.2/node_modules/express/lib/router/index.js:286:9
token: (Token from front-end (I change this line))
我不知道為什么會打印錯誤,尤其是console.log
有效並打印正確的令牌
我嘗試在每個組合中使用點而不是解構,但它仍然不起作用
您應該在解構jwt-auth
令牌之前添加一個顯式檢查,以防它不存在:
const checkIfLoggedIn = (req, res, next) => {
try {
const jwtAuth = req.cookies['jwt-auth']
if (jwtAuth === undefined) {
throw new Error('missing token');
}
const { token } = jwtAuth
console.log('token: ', token);
req.token = jwt.verify(token, SECRET);
next();
} catch (err) {
console.error(err);
res
.status(401)
.json({
ok: false,
message: 'ERROR: you need to be logged in'
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.