簡體   English   中英

Object 是未定義的,但是當我 console.log 他們總是“有效” Node.js 表達

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM