我正在创建一个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被调用,是否有办法不执行其余的方法。
答案 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。