我在Restify路由中配置了路由器处理程序。在那个处理程序中,我调用了一个自定义模块,在那里我做了一些错误检查。当我遇到错误情况时,我的代码返回下一个(错误)。我在浏览器中看到了错误消息,但由于某种原因,我的代码也会继续执行。
Restify路由器处理程序
HttpHandlers.prototype.callHttp = function(req, res, next) {
myUtils.checkInputRules(req, res, next, handlerConfig.inputRules);
//This code is getting executed:
logger.debug("Updated ...
被调用的函数:
myUtils.checkInputRules = function checkInputRule(req, res, next, inputRules) {
...
} else {
if (inputRule.ifFalse) {
var evalStr = inputRule.ifFalse;
if (evalStr != null) {
logger.debug("Executing condition.iFalse: "+evalStr);
//The code is itting this location
return next(new Error("Internal Error: Failure."));
...
答案 0 :(得分:2)
您没有包含整个代码,但问题可能是这样的:当您从函数返回时,返回哪个函数很重要。例如:
function handler(req, res, next) {
helper(req, res, next);
// this will still run
}
function helper(req, res, next) {
if (something) return next();
}
此处似乎您正在运行myUtils.checkInputRules
功能,而您正在从myUtils.checkInputRules
功能返回,但实际上您并未从HttpHandlers.prototype.callHttp
返回myUtils.checkInputRules(req, res, next, handlerConfig.inputRules);
之后的所有内容仍在执行中。
您没有显示整个代码,但它似乎都是同步的。在这种情况下,你可以这样做:
function handler(req, res, next) {
if (helper(req, res, next)) {
// next() was already called
} else {
// do something else - next() not called yet...
}
}
function helper(req, res, next) {
if (something) {
next();
// indicate that next() was already called:
return true;
}
// possibly do something else
}