我定义了以下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"}
答案 0 :(得分:0)
事实证明,在commonUtils.processInputs中,我正在调用eval,它抛出一个错误,我立即抓住了。然后我调用next(err.message +“some some text”)而不是next(new Error(errmessage +“some some text”));由于“next(err)”期望err成为Error对象,因此抛出了由于语法错误引起的新错误。