如何控制sails.js在Model生命周期方法中发送的错误代码?

时间:2015-08-31 10:30:52

标签: sails.js models http-status-codes

我正在模型上编写生命周期方法,在保存新记录之前检查用户是否存在。如果用户不存在,我希望服务器响应400 Bad Request代码。默认情况下,sails.js总是要发回500.我怎样才能让它发送我想要的代码?

这是我目前的尝试:

beforeCreate: function(comment, next) {

  utils.userExists(comment.user).then(function(userExists) {

    if (userExists === false) {
      var err = new Error('Failed to locate the user when creating a new comment.');
      err.status = 400; // Bad Request
      return next(err);
    }

    return next();

  });

},

但是,此代码不起作用。当用户不存在时,服务器总是发送500。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您不希望在生命周期回调中执行此操作。相反,当您要进行更新时,您可以检查模型,并且可以访问 res 对象...例如:

User.find({name: theName}).exec(function(err, foundUser) {
  if (err) return res.negotiate(err);

  if (!foundUser) {
    return res.badRequest('Failed to locate the user when creating a new comment.');
  }

  // respond with the success
});

这也可能会转移到政策中。

答案 1 :(得分:3)

您正尝试将http响应代码附加到与模型相关的错误。你的模型不知道http响应是什么(它永远不会知道)。

您可以在控制器中处理此错误,以在响应中设置相应的http代码。