如果错误回调,请不要执行以下代码

时间:2016-08-28 13:39:52

标签: javascript node.js express

我正在创建一个REST API,我已经定义了这个错误处理程序:

function handleError(res, reason, message, code) {
  console.log("ERROR: " + reason);
  res.status(code || 500).json({"error": message});
}

但我认为它需要某种中断,以便不执行以下代码,因为如果我实现这样的post方法:

app.post("/contacts", function(req, res) {
  var newContact = req.body;
  newContact.createDate = new Date();

  if (!(req.body.firstName || req.body.lastName)) {
    handleError(res, "Invalid user input", "Must provide a first or last name.", 400);
  }
  db.collection(CONTACTS_COLLECTION).insertOne(newContact, function(err, doc) {
      if (err) {
        handleError(res, err.message, "Failed to create new contact.");
      } else {
        res.status(201).json(doc.ops[0]);
      }
    });
});

服务器崩溃,无效插入数据库。我可以用插入部分的else来解决这个问题,但我想知道如果函数handleError被调用,是否有办法不执行其余的方法。

4 个答案:

答案 0 :(得分:1)

return语句将停止正在执行的函数的其余部分。

答案 1 :(得分:1)

调用return函数

后只需handleError
  //
  if (!(req.body.firstName || req.body.lastName)) {
    handleError(res, "Invalid user input", "Must provide a first or last name.", 400);
    return;
  }
  //

答案 2 :(得分:1)

只需编辑handleError函数,以便最后一行为:

 return res.status(code || 500).json({"error": message});

或者,在您的/ contacts处理程序中:

if (!(req.body.firstName || req.body.lastName)) {
    return handleError(res, "Invalid user input", "Must provide a first or last name.", 400);
}

答案 3 :(得分:1)

明显的答案是return或者如果调用堆栈中的某个位置有错误处理,throw也是有效的流量控制,但根据您的用例,可能会有更清洁的方法

我猜你正在使用快递。检查this