#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, об этих заголовках, как я уже сказал, мы новички в этом, поэтому не могли бы вы любезно объяснить, о чем именно говорят заголовки и какова их цель (извините за наше невежество)