[英]Non-empty string being converted to "falsy" value?
我是學習 React/Express 的初學者,但遇到了問題。 我弄清楚了問題的原因,但我仍然感到困惑。 基本上,當用戶登錄應用程序時,我使用 JsonWebToken 創建一個訪問令牌並將其存儲在 session 存儲中。 然后,我使用 axios 發出一個發布請求,傳遞數據並在標頭中傳遞訪問令牌。 我在以下 function 中執行此操作:
const addComment = () => {
if (newComment){
axios
.post(`http://localhost:3001/comments/${id}`, {comment: newComment}, {headers: {accessToken: sessionStorage.getItem("accessToken")}})
.then(response => {
setComments(response.data);
}).catch(error => {
console.log(error);
});
setNewComment("");
}
}
然后在后端處理請求,首先通過中間件:
const { verify } = require("jsonwebtoken");
const validateToken = (req, res, next) => {
const accessToken = req.header("accessToken");
console.log(req.header("accessToken")); // correctly returns token
console.log(typeof accessToken); // returns 'string'
console.log(accessToken === true); // returns 'false'
if (!accessToken) {
return res.json({error: "User not logged in"});
}
try{
const validToken = verify(accessToken, "importantSecret");
if (validToken){
return next();
}
} catch(err){
return res.json({error: err});
}
}
module.exports = { validateToken };
為了調試,我使用了console.log()
語句。 當我將accessToken
的值記錄到控制台時,我(如預期的那樣)得到以下信息:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Im9saXZlciIsImlkIjoiNjMwYWUzYjRkMmRiZmUyZGE5NDZiNmRkIiwiaWF0IjoxNjYxNzA5ODAxfQ.oVm1bIY6J5lxnaubeUh-fWWnIObmiUuL1LXjRbrW_mQ
問題是即使accessToken
是一個非空字符串,表達式accessToken === true
仍然評估為false
並且!accessToken
仍然評估為true
,導致 function 返回錯誤。 我現在知道如何解決這個問題,但我真的很想知道為什么會這樣。 答案將不勝感激!
令牌不等於 true 它等於令牌值。 你想要的是檢查是否有一個令牌,所以你會做if(token)
而不是if(token === true)
。
所以console.log('hi' === true)
將記錄 false 因為字符串'hi'
不等於 true 它等於'hi'
在此處檢查 javascript 相等性和相同性如何工作:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.