微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 heroku 和 bcryptjs 时出现内部服务器错误

如何解决使用 heroku 和 bcryptjs 时出现内部服务器错误

我和我的朋友正在开发一个前端网站,我们需要在它进入数据库之前对一些数据进行加密。我们被建议使用 bcryptjs,所以我们这样做了

在以下代码中您可以看到我们的中间件:

const jwt = require('jsonwebtoken'); //módulo NPM
const config = require('./config.js'); //ficheiro de configuração

let checkToken = (req,res,next) => {
let token = req.headers['x-access-token'] || req.headers['authorization'];
if (token.startsWith('Bearer ')) {
    token = token.slice(7,token.length); //remove a palavra ‘Bearer ’
    }
    if (token) {
    jwt.verify(token,config.jwtSecret,(err,decoded) => {
    if (err) {
    return res.json({
    success: false,message: 'O token não é válido.'
    });
    } else {
    req.decoded = decoded;
    next();
    }
    });
    } else {
        return res.json({
            success: false,message: 'Token indisponível.'
            });
            }
            };
            module.exports = {
            checkToken: checkToken
            }

路由器:

router.get('/list',middleware.checkToken,utilizadorController.list);

App.js:

app.use('/utilizador',utilizadorRouters)

我们认为一切都已正确连接,但是当我们运行我们的网站时只出现一条消息“内部服务器错误”,因为我们使用的是 heroku,我们执行了 heroku logs --tail 这个命令,所以我们可以访问日志,我们发现出问题出在终端 2021-06-02T20:06:44.372296+00:00 app[web.1]: TypeError: Cannot read property 'startsWith' of undefined 上,这与中间件代码中的第一个 if 有关(上面发布)

为什么会出现此错误?有什么解决办法吗?

解决方法

我猜这条线

let token = req.headers['x-access-token'] || req.headers['authorization'];

在任一标头中均未找到标记。所以 token 返回未定义,而不是字符串。所以 token.startsWith() 不起作用并给出您看到的错误。

当类似这样的事情发生时,Web 服务器会向浏览器返回 500 错误。

故障排除:执行 console.log(req.headers) 并查看输出。在我看来,您发送的 http 请求缺少这些标头之一。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。