【问题标题】:POST request... UnhandledPromiseRejectionWarning: Unhandled promise rejectionPOST 请求... UnhandledPromiseRejectionWarning:未处理的承诺拒绝
【发布时间】:2021-10-13 14:55:53
【问题描述】:

发出帖子请求时出现此错误:

UnhandledPromiseRejectionWarning:未处理的承诺拒绝。

如果有人能解释为什么会这样,我将不胜感激:) 谢谢

更新

因此,此代码 POST 成功。但是,当我取消注释验证代码时,我得到了同样的错误......

router.post("/", async (req, res) => {
  //let client = validate(req.body);

  //if (client.error) {
    //res.status(400).json(result.error);
    //return;
  //}

  let client = new Client(req.body);

  try {
    let savedClient = await client.save();
    res.location(`/${savedClient._id}`).status(201).json(savedClient);
  } catch (error) {
    res.status(500).json(savedClient.error);
  }
});

【问题讨论】:

  • 你从哪里得到result? (result.error)
  • 那应该是保存的Client.error。我改变了它,但仍然是同样的问题。
  • validate(req.body) 返回什么?它会抛出错误或异常吗?

标签: javascript node.js mongodb express


【解决方案1】:

我看不到您在哪里初始化 savedClient,我认为您的错误在于您的捕获。您引用的对象 (savedClient) 似乎不在范围内。

试试这个:

router.post("/", async (req, res) => { 
  let client = new Client(req.body);
  try {
    let savedClient = await client.save();
    res.location(`/${savedClient._id}`).status(201).json(savedClient);
  } catch (error) {
    console.log(error)
    res.status(500).json(error);
  }
});

【讨论】:

  • 检查我更新的代码
【解决方案2】:

也许

let savedClient = await client.save();

【讨论】:

    【解决方案3】:

    我觉得应该是的

    ...
    } catch (error) {
        res.status(500).json(savedClient.error);
    }
    

    因为 promise 的拒绝错误应该被 try/catch 语句捕获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多