我正在建立我的第一个服务。这段代码有什么问题,因为我可以看到用户已插入数据库但我的代码没有到达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;
},
答案 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.negotiate
,res.serverError
,res.badRequest
等。
答案 1 :(得分:0)
我认为“this”已经是一个对象,所以不需要toObject()。这对我有用:
toJSON: () => {
delete this.password;
return this;
},