1 回答

TA貢獻1946條經(jīng)驗 獲得超3個贊
我寫這篇文章作為答案只是為了我可以提出一些代碼,您可以運行這些代碼來測試各種理論,因為我們還不知道實際問題是什么。
ETIMEDOUT 并沒有真正告訴我們您收到錯誤的原因。
如果這是一個主要站點,則服務(wù)器不太可能只是性能不佳并且實際上超時了。它可能會因為您一次向它發(fā)送 5 個快速請求而感到不滿,但它確實應(yīng)該給您帶來不同類型的錯誤。
也有可能,您和此 api 服務(wù)器之間的網(wǎng)絡(luò)連接存在某種問題。
要排除快速請求問題,您可以串行發(fā)送請求,在請求之間有短暫的延遲,看看這是否會改變問題。
app.post("/movie/:movieName/", async function(req, res) {
try {
const Title = req.params.movieName;
function fetchCommon(suffix) {
return fetch("https://api.themoviedb.org/3/movie/" + suffix).then(r => r.json());
}
function delay(t) {
return new Promise(resolve => {
setTimeout(resolve, t);
});
}
const input = [
Title + "/videos?=en-us",
Title + "?&language=en-US",
Title + "?&language=en-US",
"now_playing?&language=en-US&page=2",
Title + "/similar?&language=en-US"
];
const results = [];
const waitTime = 250;
for (arg of input) {
let result = await fetchCommon(arg);
results.push(result);
await delay(waitTime);
}
const Details = response[1];
const Video = response[0].results[0];
const Cast = response[2].cast;
const Similar = response[3].results;
const Playing = response[4].results;
res.render(
"movie", {
Details,
Video,
Cast,
Similar,
Playing
}
);
} catch (e) {
// always send a response, even if there's an error
console.log(e);
res.sendStatus(500);
}
});
注意:這是調(diào)試問題的第一步。希望您能從運行此代碼中學(xué)到一些東西,然后可以歸零到問題的實際根本原因。
添加回答
舉報