正如标题所暗示的,我不确定当 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);
}
});
但它并没有真正与上面的代码保持一致,因为响应状态在代码中的响应对象中,而这里的错误包含响应状态。