0

正如标题所暗示的,我不确定当 API 请求超时时如何处理 504 错误。

在我的路由器中,我正在发送一个获取请求,格式化输出,如果 api 请求超时,我将响应代码设置为 504

const express = require("express");
const router = express.Router();
const axios = require("axios");
const flatBreeds = require("../flatBreeds");

router.get("/breeds", async (req, res) => {
  try {
    const apiResponse = await axios.get("https://dog.ceo/api/breeds/list/all");
    let breeds = await apiResponse.data.message;
    breeds = flatBreeds(breeds);
    res.status(200).json(breeds);
  } catch (err) {
    if (err.constructor.name === "AbortError") {
      res.status(504).json(err);
    }
  }
});

module.exports = router;

mockAxios.get.mockImplementation即使Promise.reject会测试408超时,但这是不同的。我需要测试某些外部 API 是否超时,我需要这样做,以便测试脱机工作。

我写了这个:

  it("returns a 504 Gateway Timeout statusCode when a timeout occurs", async () => {
    const err = new Error("504 Gateaway timeout");
    const fetchTimeout = mockAxios.get.mockImplementation(() =>
      Promise.reject({ status: 504, err })
    );
    try {
      await fetchTimeout();
    } catch (e) {
      console.log(e);
      expect(e.status).toEqual(504);
    }
  });

但它并没有真正与上面的代码保持一致,因为响应状态在代码中的响应对象中,而这里的错误包含响应状态。

4

0 回答 0