我正在使用Node.js Express来创建一些HTTP REST API。 我有方法调用下划线服务,返回 Promise ,如下所示:
function getAllApps(request, response) {
appService.getAllApps(request.query.$expand).then(function (apps) {
response.status(200).send(apps);
})
}
我将方法映射如下:
var api = express.app;
api.get('/apps', getAllApps);
现在,我已经引入了错误处理如下:
function getAllApps(request, response) {
appService.getApps(request.query.$expand).then(function (apps) {
response.status(200).send(apps);
})
.catch(function (err) {
console.error('Error occurred in Apps Api: ' + err);
response.status(400).send(err);
});
}
除了遇到错误时,我在控制台中获得完整的错误堆栈,如下所示:
Express is listening on 127.0.0.1:3000
Web Api ready
Error occurred in Apps Api: Error: Actions is not defined on the model.
但我的HTTP方法返回400并且正文为空,它只包含大括号:
{}
答案 0 :(得分:2)
它是由错误对象没有可枚举属性引起的,因此JSON.stringify(new Error("my message"))
将返回{}
。要获得与控制台输出相同的结果,您必须将错误对象与字符串相关联,如下所示:
.catch(function (err) {
console.error('Error occurred in Apps Api: ' + err);
response.status(500).send("" + err);
});
PS:你应该使用status(500)
来解决内部错误。
修改强>
如果这种情况不需要单独的错误处理机制,您可以让express来处理您的错误:
function getAllApps(request, response, next) {
appService.getApps(request.query.$expand).then(function (apps) {
response.status(200).send(apps);
})
.catch(function (err) {
next(err || new Error("Unknown error"));
});
}
如果express'默认错误处理不能给你满意的结果,你可以注册自己的错误处理程序:
...
// note that the middleware having 4 parameters makes it an error handler
app.use(function(err, req, res, next) {
console.error('Error occurred in Apps Api: ' + err);
response.status(500).send("" + err);
});
答案 1 :(得分:-1)
删除状态400,如下所示:
function getAllApps(request, response) {
appService.getApps(request.query.$expand).then(function (apps) {
response.status(200).send(apps);
})
.catch(function (err) {
console.error('Error occurred in Apps Api: ' + err);
response.json('Error occurred in Apps Api: ' + err);
});
}