NodeJS JWT错误类型错误:"instanceof"的右侧不是对象

qni6mghb  于 2023-01-08  发布在  Node.js
关注(0)|答案(2)|浏览(502)

我试图用express和JWT(JsonWebToken)创建一个应用程序。它在本地工作,但当我试图在家里的服务器上使用它时,它给出了一个错误。我花了大约一个小时试图找到解决方案,但没有任何效果。

TypeError: Right-hand side of 'instanceof' is not an object
    at Object.module.exports [as sign] (/home/container/node_modules/jsonwebtoken/sign.js:108:58)
    at server.post (/home/container/server.js:51:9)
    at Layer.handle [as handle_request] (/home/container/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/container/node_modules/express/lib/router/route.js:144:13)
    at Route.dispatch (/home/container/node_modules/express/lib/router/route.js:114:3)
    at Layer.handle [as handle_request] (/home/container/node_modules/express/lib/router/layer.js:95:5)
    at /home/container/node_modules/express/lib/router/index.js:284:15
    at Function.process_params (/home/container/node_modules/express/lib/router/index.js:346:12)
    at next (/home/container/node_modules/express/lib/router/index.js:280:10)
    at /home/container/node_modules/body-parser/lib/read.js:137:5

这是一个非常简单的应用程序,但我不知道为什么它会出现上面的错误
这是我的代码:

const cors = require('cors');
const express = require('express');
const bodyParser = require('body-parser');



const server = express();
const port = 3000 || process.env.PORT;

server.options('*', cors());
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: false }));

const jwt = require('jsonwebtoken');

 server.listen(port, () => {
    console.log(`Server is running on port ${port}`);
});

const posts = [
    {
        user: 'david',
        title: 'post'
    },
    {
        user: 'bryan',
        title: 'post2'
    }
];


server.get('/posts', authenticateToken, (req, response) => {
 response.json(posts.filter(post => post.user === req.user));
});

server.post('/login', (req, res) => {
    const {username, password} = req.body;
    if(username == null) return res.sendStatus(401);

    jwt.sign(username, 'test', (err, token) => {
        if(err) {
            console.log(err);
            return res.sendStatus(403);
        }
    
        console.log(accessToken);
        res.json({accessToken: accessToken});
    });
 });
  
   

function authenticateToken(req, res, next) {
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];

    if(token == null) return res.sendStatus(401);
    jwt.verify(token, 'test', (err, user) => {
        if(err) return res.sendStatus(403);
        req.user = user;
        next();
    });
}

我在任何网站上都找不到解决方案。

vhipe2zx

vhipe2zx1#

我也遇到了同样的问题,我发现这个问题是在运行npm audit fix命令来摆脱漏洞时出现的。
进程更新了护照模块,这似乎是问题的原因。我回到应用修复程序之前的设置,一切都再次正常工作。
差异:

"passport": "~0.2.0",
"passport": "^0.6.0",

"passport-jwt": "^4.0.0",
"passport-jwt": "^4.0.1",

相当旧的节点版本:10.16.0
希望能有所帮助

5us2dqdw

5us2dqdw2#

我更新了服务器上的节点版本,它修复了错误。

相关问题