Я использую node-fetch для вызова из одного API в другой, однако при возникновении ошибки в «API 2» выполняется обратный вызов успеха.
Я не уверен, является ли это предполагаемым поведением или нет, и если вы должны проверить ответ для кода состояния, а не для выполнения обратного вызова catch
.
API 1:
fetch('http://localhost:4060/api/passwords', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
userId: doc._id,
hash: hash
})
})
.then((response) => {
console.log(response);
return res.json(doc);
})
.catch((e) => {
console.log('ERROR')
next(e);
});
API 2:
app.use((err, req, res, next) => {
res.status(err.status).json({
message: err.isPublic ? err.message : httpStatus[err.status],
stack: config.env === 'development' ? err.stack : {}
});
});
При возникновении ошибки в «API 2» ответ выглядит следующим образом:
Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]:
{ body:
PassThrough {
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 3,
_maxListeners: undefined,
_writableState: [Object],
writable: false,
allowHalfOpen: true,
_transformState: [Object] },
disturbed: false,
error: null },
[Symbol(Response internals)]:
{ url: 'http://localhost:4060/api/passwords',
status: 400,
statusText: 'Bad Request',
headers: Headers { [Symbol(map)]: [Object] },
counter: 0 } }
Как видите, произошла ошибка, и фрагмент из API 2 запустился, возвращая ошибку с кодом состояния 400
.
Как упоминалось выше, это предполагаемое поведение? У меня сложилось впечатление, что catch
должен работать вместо then
, есть ли способ, которым я могу настроить свой код для этого?