纠正神秘抛出的异常

时间:2016-10-06 09:31:27

标签: javascript node.js express restify

我定义了以下Restify路由处理程序。

MyModule.prototype.uploadDateChecker = function (req, res, next) {
    req.locals = {};
    var handlerConfig = req._self = this;

    //Uncommenting this line does throw the exception with the message.
    //next(new Error("Test Error"));

    var continueProcessing = commonUtils.processInputs(req, res, next, handlerConfig, __function, __line);
    ...
    //If I uncomment this one instead, some other exception is thrown first somewhere resulting in: {"code":"InternalError","message":""}
    //next(new Error("Test Error: "+continueProcessing));

由于某种原因,在commonUtils.processInputs函数返回后,客户端收到500错误,消息为""。如果我添加

next(new Error("Test Error"));

在调用processInputs之前,然后500错误有一个"测试错误"在身体里。如果我在processInputs之后将其移动到右边,则500没有消息。显然,任何消息都会从processInputs内部抛出另一个异常。但是,如果我进入processInputs并且在返回之前我添加下一个(新错误("测试错误"))语句,那么客户端将获得测试错误。因此,我不知道抛出线被注释掉时如何/为什么抛出空白消息。

ProcessInputs结束:

...
commonUtils.processOutputs = function (req, res, next, handlerConfig, func, line) {
    var resp = commonUtils.enterExit(req, res, next, handlerConfig, func, line, "START");
    //Uncommenting this line results in: {"message":"Test Error: true"}
    //next(new Error("Test Error: "+resp));

    return resp;

}

没有消息的HTTP响应正文:

{"code":"InternalError","message":""}
带有消息的HTTP响应主体(在processInputs内部):

{"message":"Test Error: true"}

1 个答案:

答案 0 :(得分:0)

事实证明,在commonUtils.processInputs中,我正在调用eval,它抛出一个错误,我立即抓住了。然后我调用next(err.message +“some some text”)而不是next(new Error(errmessage +“some some text”));由于“next(err)”期望err成为Error对象,因此抛出了由于语法错误引起的新错误。