Экспресс-возврат 200, даже если ошибка с сервера

#node.js #express #node-fetch

#node.js #экспресс #узел-выборка

Вопрос:

Я пытаюсь подключиться к сторонней конечной точке из своего приложения express. С конкретным телом, выполняющим тот же запрос в curl непосредственно к этой конечной точке, я получаю статус 400 с конкретным сообщением об ошибке.

Теперь, используя экспресс выборку узла, я получаю сообщение об ошибке, но получаю код состояния 200.

 export async function authenticate() {
  const result =  await fetch(`${config.host}/token`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: JSON.stringify({
        key: "someValueThatShouldReturnError"
    })
  });
  console.log(result.status); // this prints 400
  const json = await result.json();
  return json;
}
  

И в маршрутизаторе у меня есть

 router.post('/auth', handleErrorAsync(async(req: any, resp: Response, err: any) => {
  let res = await authenticate();
  resp.send(res);
}));
  

временное решение — добавить это в асинхронную функцию после объявления json переменной .. Но я чувствую, что это должно быть обработано из коробки.

   if (result.status !== 200) {
    throw createError(result.status, json.error);
  }
  

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

1. resp.status(res.status).send(res) ссылка

2. какова цель этой строки ` const json = await result.json(); `

3. @MAS для преобразования ответа с сервера в JSON. Без этого я получаю ответ { "size": 0, "timeout": 0 }

4. попробуйте это, const status = result.status; const json = await result.json(); затем верните оба значения; return {status , json} , const { json, status } = await authenticate();

5. @MAS да, это работает, но экспресс не должен обрабатывать это автоматически? :O