Я делаю RESTful API для интерфейса vuejs с аутентификацией и сохранением данных по учетной записи.
Я получаю эту ошибку при попытке войти в систему пользователя. По сути, мой интерфейс отправит запрос с тело, содержащее имя пользователя и пароль.
Вот журнал промежуточного программного обеспечения в express:
exports.post_LogIn = (req, res, next) => {
User.findOne({ username: req.body.username })
.then(foundUser => {
if (!foundUser) {
console.log("no user");
const error = new Error("No user with that username");
error.statusCode = 400;
error.tosend = "No user with that username";
throw error;
} else {
return bcrypt.compare(req.body.password, foundUser.password);
}
})
.then(isEqual => {
if (!isEqual) {
console.log("wrong password");
const error = new Error("Passwords don't match");
error.statusCode = 400;
error.tosend = "Passwords don't match";
throw error;
}
console.log("logged in");
const token = jwt.sign(
{
username: foundUser.username
},
"secretpassword",
{ expiresIn: "24h" }
);
console.log(token);
res.status(200).json({ username: foundUser.username });
})
.catch(err => {
res.status(err.statusCode).json({ message: err.tosend });
});
};
Так что в основном, когда есть проблема с учетными данными (либо неправильное имя пользователя или пароль), я хочу отправить ответ клиенту с сообщением о том, что не так, и пусть клиент справится с этим. Это работает просто отлично и, как и ожидалось.
Однако, когда я отправляю действительные учетные данные, мой оператор console.log проходит, но часть токена и ответа выдает мне эту ошибку
(узел : 14515) UnhandledPromiseRejectionWarning: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: недопустимый код состояния: не определено в ServerResponse.writeHead (_http_server. js: 242: 11) в ServerResponse._implicit_h_t_ht_0: js: 579: 9) в ServerResponse.end (_http_outgoing. js: 689: 5) в ServerResponse.send (/home/martin/dev/projets/trader-backend/node_modules/express/lib/response.js: 221: 10) в ServerResponse. json (/home/martin/dev/projets/trader-backend/node_modules/express/lib/response.js:267:15) в / home / martin / dev /projets/trader-backend/controllers/UserController.js:97:34 (узел: 14515) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1) (узел: 14515) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели. В будущем отклонения обещания, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом завершения.
Я попытался закомментировать часть токена или комментировать ответ и консоль, записывающую журнал. токен, и я все еще получаю ту же ошибку.
Однако, если я закомментирую токен и использую res.send вместо res. json, он, кажется, работает нормально, и мой интерфейс получает ответ.
Есть идеи, что может быть причиной этого? Я как бы потерялся здесь