返回错误后执行Node.js Restify代码

时间:2016-09-19 22:27:09

标签: javascript node.js express restify

我在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."));
...

1 个答案:

答案 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
}