处理SailsJS中的服务器错误

时间:2014-12-10 13:55:25

标签: node.js mongodb error-handling sails.js node-webkit

我正在SailsJS中创建一个应用程序。我在DB相关查询中发生错误时遇到错误,例如typeError或500错误。我正在使用MongoDB。有什么方法可以在服务器端捕获此错误。

现在,这些错误导致我的服务器崩溃。服务器停止了。我必须重新启动服务器。

请帮我解决这个问题。 提前谢谢。

3 个答案:

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

然后在"Custom Responses"

中处理错误