如果验证函数中的验证回调参数isValid设置为false,我希望函数app.patch立即返回。
但不是: - /
我看不出错误,我做错了什么?
function route(app) {
app.patch('/category/:category_id', function(req, res) {
var id = req.params.category_id;
var title = req.body.title;
validate('title', title, function(response, isValid) {
if(!isValid) {
res.json(422, response);
return;
};
});
console.log("should not get to here");
...
});
var validate = function validate(field, value, callback) {
if (value === undefined || value.trim() === '') {
var response = { };
response.message = "Validation failed";
callback(response, false);
} else {
callback(null, true);
}
};
};
module.exports = route;
答案 0 :(得分:2)
我看不出错误,我做错了什么?
您从validate
的回调函数返回,但不是从patch
的回调函数返回。
如何改进我的代码?
如果validate
是同步的(如您发布的代码中所示),请不要使用回调。只需return
结果:
app.patch('/category/:category_id', function(req, res) {
var id = req.params.category_id;
var title = req.body.title;
var response = validate('title', title);
if (response) {
res.json(422, response);
return;
}
console.log("will not get to here");
…
});
function validate(field, value, callback) {
if (value === undefined || value.trim() === '') {
return response = {message: "Validation failed"};
return null;
}
如果您需要/需要使用回调,请将should not get here
之后的所有代码移到validate
回调函数中,然后再返回if
- 语句:
app.patch('/category/:category_id', function(req, res) {
var id = req.params.category_id;
var title = req.body.title;
validate('title', title, function(response, isValid) {
if (!isValid) {
res.json(422, response);
return;
}
console.log("will not get to here");
…
});
});
function validate(field, value, callback) {
// something async, then
callback({message: "Validation failed"}, false);
// or
callback(null, true);
}