Loopback:PersistedModel.findById()不提供最终实例。像保存方法()不存在
问题描述:
在“afterRemote” -hook我想找到一个特定的模式,改变属性:Loopback:PersistedModel.findById()不提供最终实例。像保存方法()不存在
Team.afterRemote('prototype.__create__messages', function(ctx, message, next) {
var Message = Team.app.models.message;
// Promises.all not required, just for debugging (i removed other code)
const promises = Promise.all([
Message.findById(message.id),
])
promises.then(function(result) {
console.log("FOUND Message ", result);
// here i'd like to change an attribute and save the model back to database
console.log(typeof result.save); // will print undefined
});
我怎么能操纵发现实体和保存呢?保存() - 方法不存在。总而言之,findById提供了一个普通的JSON对象,而不是一个真正的PersistedModel实例。
模型被定义为:
{ "name": "message", "base": "PersistedModel", "strict": false, "idInjection": false, "options": { "validateUpsert": true },
数据库是一个MongoDB的。
答
解决方案:
console.log("FOUND Message ", result[0]);
console.log(typeof result[0].save);
根源:请看看Promise.all文档
Promise.all是异步完成的。在所有情况下,返回的 承诺都通过数组满足 作为参数(也是非承诺值)传递的所有值。
所以你的情况,result
是一个数组像[messageObject]
。
希望我的回答可以帮助:)
答
回送模型函数也支持promise。您的代码可以重写如下。
var Message = Team.app.models.message;
Message.findById(message.id).then(function(result) {
console.log("FOUND Message ", result);
console.log(typeof result.save);
});
'findById'实际上必须返回一个模型实例。 http://apidocs.strongloop.com/loopback/#persistedmodel-findbyid你应该在这里记录一个bug:https://github.com/strongloop/loopback/issues/new – Sterex
啊,看起来像你有 - https:/ /github.com/strongloop/loopback/issues/3521 :) – Sterex