Внутренняя ошибка сервера при использовании heroku и bcryptjs

#node.js #json #heroku #middleware #bcrypt

Вопрос:

Мы с моим другом разрабатываем веб-сайт, на котором нам нужно зашифровать некоторые данные, прежде чем они попадут в базу данных. Нам посоветовали использовать 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', middleware.checkToken,utilizadorRouters)
 

Мы думаем, что все подключено правильно, однако, когда мы запускаем нашем сайте, просто появляется сообщение «Внутренняя ошибка сервера», так как мы используем в Heroku мы выполнили heroku logs --tail эту команду, чтобы мы могли иметь доступ к логам мы выяснили, что проблема в терминале 2021-06-02T20:06:44.372296 00:00 app[web.1]: TypeError: Cannot read property 'startsWith' of undefined , это связано с первым, если у промежуточного кода (опубликовано выше)

Почему мы получаем эту ошибку? И есть ли у этого какое-то решение?

Ответ №1:

Я предполагаю, что эта строка

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

не находит маркера ни в одном заголовке. Таким token образом, возвращается неопределенное, а не строка. Так token.startsWith() что не работает и выдает ошибку, которую вы видели.

Когда происходит что-то подобное, веб-сервер выдает браузеру сообщение об ошибке 500.

Для устранения неполадок: Сделайте console.log(req.headers) и посмотрите на вывод. Мне кажется, что в http-запросе, который вы отправляете, отсутствует один из этих заголовков.

Комментарии:

1. Спасибо за вашу помощь, мы использовали эту команду, чтобы проверить ее, и вы абсолютно правы, в ней говорится, что ошибка составляет 500, об этих заголовках, как я уже сказал, мы новички в этом, поэтому не могли бы вы любезно объяснить, о чем именно говорят заголовки и какова их цель (извините за наше невежество)