我正在SailsJS中创建一个应用程序。我在DB相关查询中发生错误时遇到错误,例如typeError或500错误。我正在使用MongoDB。有什么方法可以在服务器端捕获此错误。
现在,这些错误导致我的服务器崩溃。服务器停止了。我必须重新启动服务器。
请帮我解决这个问题。 提前谢谢。
答案 0 :(得分:1)
水线很可能会抛出异常并且你没有抓住它。这里有一些代码可以解决这个问题:
controlleAction:function(req,res){
var invalidParams = {};//whatever's causing the error
Model
.create(invalidParams)
.exec(function(err,created){
if(err) res.json(err);
res.json(created);
});
}
你也可以使用promise语法
controlleAction:function(req,res){
var invalidParams = {};//whatever's causing the error
Model
.create(invalidParams)
.then(function(created){
res.json(created);
})
.catch(function(err){
res.json(err);
});
}
如果您尝试捕获整个应用程序中的每个全局错误, 在你的app.js中,有这样的一行:
// Start server
sails.lift(rc('sails'));
使用try catch块包围该行,如下所示:
try{
// Start server
sails.lift(rc('sails'));
}catch(e){
console.dir(e);
}
答案 1 :(得分:1)
请注意:
controlleAction:function(req,res){
var invalidParams = {};//whatever's causing the error
Model
.create(invalidParams)
.exec(function(err,created){
// return res.json()
if(err) return res.json(err);
return res.json(created);
});
}
// The difference is in the return
if(err) return res.json(err);
如果您有错误,没有返回,服务器将崩溃,因为它会尝试发送两个响应,其中一个包含错误,另一个包含创建的对象。
答案 2 :(得分:0)
如果您使用的是Sails 0.10.x,则可以将错误传递给下一个处理程序:
controlleAction:function(req,res, next){
var invalidParams = {};//whatever's causing the error
Model
.create(invalidParams)
.exec(function(err,created){
if(err) return next(err);
return res.json(created);
});
}
中处理错误