如何解决nodejs API调用超时
我已经构建了一个 nodejs-API,一切正常,但是在我的一个控制器函数中,响应有时没有发送(及时)。在这些情况下,一切正常,只是没有得到前端的响应(及时)。控制台显示:
错误:超过 1000 毫秒的超时时间 在 createError (createError.js:16) 在 XMLHttpRequest.handleTimeout (xhr.js:96)
我的控制器功能:
exports.postQuestion = async (req,res,next) => {
try {
if (!req.userId) {
const error = new Error("Authorization Failed!");
error.msg = "No valid token!";
error.statusCode = 401;
throw error;
}
const user = await User.findById(req.userId);
if (user.role === "newUser") {
const error = new Error("No Permission!");
error.msg = "User is not permitted!";
error.statusCode = 401;
throw error;
}
const category = await Category.findOne({ value: req.body.category });
if (!category) {
const error = new Error("UnkNown category!");
error.msg = "Can´t find this category in database!";
error.statusCode = 404;
throw error;
}
const parsedAnswers = JSON.parse(req.body.answers);
const fileUrl = req.file ? req.file.path.replace(/\\/g,"/") : "";
const resp = await deepl({
text: req.body.title,target_lang: "EN",auth_key: deeplAuthKey,});
const lang = resp.data.translations[0].detected_source_language;
const answersArray = parsedAnswers.map((obj) => obj.answer);
const stringArray = answersArray.map((answer) => answer);
const urlString = stringArray.join("/");
const ta = await deepl({
text: urlString,target_lang: lang === "DE" ? "EN" : "DE",});
const challenge = new Challenge();
if (lang === "DE") {
challenge.deAnswers = parsedAnswers;
}
if (lang === "EN") {
challenge.enAnswers = parsedAnswers;
}
const tt = await deepl({
text: req.body.title,});
const tb = await deepl({
text: req.body.body,});
const translated = ta.data.translations[0].text;
const transTitle = tt.data.translations[0].text;
const transBody = tb.data.translations[0].text;
const transAns = translated.split("/");
const transAnswers = [...parsedAnswers];
for (let i = 0; i < parsedAnswers.length; i++) {
transAnswers[i].answer = transAns[i];
}
challenge.type = req.body.type;
challenge.category = category._id;
challenge.image = fileUrl;
challenge.userRole = user.role;
challenge.user = user._id;
challenge.public = false;
if (lang === "DE") {
challenge.deTitle = req.body.title;
challenge.deBody = req.body.body;
challenge.enAnswers = transAnswers;
challenge.enTitle = transTitle;
challenge.enBody = transBody;
}
if (lang === "EN") {
challenge.enTitle = req.body.title;
challenge.enBody = req.body.body;
challenge.deAnswers = transAnswers;
challenge.deTitle = transTitle;
challenge.deBody = transBody;
}
const newChallenge = await challenge.save();
console.log(newChallenge);
res.status(200).json({ challenge: newChallenge });
} catch (err) {
console.log("ERROR",err);
next(err);
}
};
我在那里有一些异步请求,所以当然可能需要更长的时间,但是有没有办法设置更多的超时时间,或者还有其他解决方案吗?数据始终存储在数据库中。 (有时收到的响应是正确的)
提前致谢。
斯文
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。