微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nodejs API调用超时

如何解决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 举报,一经查实,本站将立刻删除。