SailsJS服务电话

时间:2016-02-10 21:16:05

标签: node.js sails.js

我正在建立我的第一个服务。这段代码有什么问题,因为我可以看到用户已插入数据库但我的代码没有到达res.json

我的服务

create: function(data) {
  return User.create(data);
}

我的控制器

UserService.create(req.params.all())
  .then(function(err, user) {
    if (err) return err;
    res.json(user);
  });

更新的代码:

我的服务

create: function(data) {
  return User.create(data);
},

我的控制器

UserService.create(req.params.all())
  .then(function(user) {
    res.json(user);
  })
  .catch(function(err) {
    return res.negotiate(err);
  });

这给了我以下错误:

error: Sending 500 ("Server Error") response: TypeError: this.toObject is not a function at [object Object].module.exports.attributes.toJSON (.../api/models/User.js:47:23) ...

显然我把事情搞混了。我不知道何时使用承诺,何时回调,何时返回。有人可以向我解释一下吗?

更新的代码:

这是触发错误时的阻止。如果我删除此块,代码正在运行。

// Removing password from output
toJSON: () => {
  var data = this.toObject();
  delete data.password;

  return data;
},

2 个答案:

答案 0 :(得分:0)

看起来您正在混合承诺和回调语法。使用.then()时,只需使用第一个参数:

UserService.create(req.params.all())
  .then(function(user) {
    res.json(user);
  });

因为要捕获错误,请使用.catch()

UserService.create(req.params.all())
  .then(function(user) {
    res.json(user);
  })
  .catch(function(err) {
    return res.negotiate(err);
  });

如果要使用双参数回调样式,请改用.exec()

UserService.create(req.params.all())
  .exec(function(err, user) {
    if (err) {return res.negotiate(err);}
    res.json(user);
  });

无论哪种方式,你都不应该只是return来自控制器动作;它应始终以某种响应终止(对于错误,请使用res.negotiateres.serverErrorres.badRequest等。

答案 1 :(得分:0)

我认为“this”已经是一个对象,所以不需要toObject()。这对我有用:

toJSON: () => {
  delete this.password;
  return this;
},