何时在异步中发送响应 await try catch 块

use*_*989 2 mongoose mongodb node.js

我看过 2 个不同的例子,想知道哪个是“正确的”,或者它是否没有太大区别。示例 1 在 try 内部发送响应,示例 2 在 try 块外部发送。

示例 1:

  try {
    await food.save();
    res.status(201).send(food);
  } catch (err) {
    res.status(500).send(err);
  }
Run Code Online (Sandbox Code Playgroud)

示例 2:

  try {
    await food.save();
  } catch (err) {
    res.status(500).send(err);
  }

  res.status(201).send(food);
Run Code Online (Sandbox Code Playgroud)

You*_*saf 6

在第一个例子中,如果await food.save();抛出一个错误,那么它下面的代码将不会执行并且执行将移动到catch块。客户端将收到状态代码为 的响应500

在第二个示例中,如果await food.save();失败,则catch块将执行,服务器将向客户端发送状态代码为 的响应500,然后最后一条语句也将执行,这可能不是您想要的。您还会收到一个错误,即一旦发送标头就无法重新发送标头。这是因为您的代码将尝试将响应发送给客户端两次。

您应该使用第一个示例,因为您只想在文档成功保存在数据库中时发送成功响应。