Sails.js 如何通过publishAdd()-通知获取添加的记录(不仅仅是id)?

Sails.js 如何通过publishAdd()-通知获取添加的记录(不仅仅是id)?,sails.js,waterline,Sails.js,Waterline,每个Sails.js模型都有方法。当一条新记录被添加到相关模型时,这会通知每个侦听器 此通知不包含新创建的记录。因此,我必须从客户端启动另一个请求以获取新记录 是否有可能,Sails.js会发送带有通知的新记录,这样我就可以减少请求数量 解决方案 我意识到人们接受的答案是这样的: 无法使用默认的publishAdd方法获取此记录。但是,您可以重写该方法并在实现中执行子记录查找 通过向该模型类添加publishAdd方法,您可以在每个模型的基础上覆盖publishAdd,或者通过将该方法添加到co

每个
Sails.js
模型都有方法。当一条新记录被添加到相关模型时,这会通知每个侦听器

此通知不包含新创建的记录。因此,我必须从客户端启动另一个请求以获取新记录

是否有可能,Sails.js会发送带有通知的新记录,这样我就可以减少请求数量

解决方案 我意识到人们接受的答案是这样的:

无法使用默认的
publishAdd
方法获取此记录。但是,您可以重写该方法并在实现中执行子记录查找

通过向该模型类添加
publishAdd
方法,您可以在每个模型的基础上覆盖
publishAdd
,或者通过将该方法添加到
config/models.js
文件来覆盖所有模型


我会先开始,然后根据需要进行调整。

我知道这很旧,但我不得不再次解决这个问题,我不喜欢加入重复代码的想法,因此如果有人正在寻找替代方案,诀窍是使用afterCreate:方法更新新创建记录的模型

假设你有一个游戏,你想让你的玩家订阅。游戏有通知,这是一组文本通知,您只希望游戏中的玩家收到这些通知。要做到这一点,通过请求在客户端上订阅游戏。在这里,我通过调用game/gameId来获得一个特定的游戏,然后根据模型上已有的通知和玩家构建我的页面:

io.socket.get('/game/'+gameId, function(resData, jwres) {
    let players = resData.players;
    let notifications = resData.notifications;
    $.each(players, function (k,v) {
        if(v.id!=playerId){
            addPartyMember(v);
        }
    });
    $.each(notifications, function (k,v) {
        addNotification(v.text);
    });
});
如我们所知,订阅游戏将只提供id,但当我添加通知时,我同时拥有游戏id和通知记录,因此我可以将以下内容添加到通知模型中:

afterCreate: function (newlyCreatedRecord, cb) {
    Game.publishAdd(newlyCreatedRecord.game,'notifications',newlyCreatedRecord);
cb();}
由于我原来的socket.get订阅了一个特定的游戏,因此我只能使用game.publishAdd()向这些订阅方发布。现在回到客户端,监听返回的数据:

io.socket.on('game', function (event) { 
if (event.attribute == 'notifications') {
    addNotification(event.added.text);
    }
});
传入的记录将如下所示:

 {"id":"59fdd1439aee4e031e61f91f",
 "verb":"addedTo",
"attribute" :"notifications",
 "addedId":"59fef31ba264a60e2a88e5c1",
 "added":{"game":"59fdd1439aee4e031e61f91f",
 "text":"some messages",
 "createdAt":"2017-11-05T11:16:43.488Z",
 "updatedAt":"2017-11-05T11:16:43.488Z",
 "id":"59fef31ba264a60e2a88e5c1"}}

谢谢你快速准确的回答。我刚刚将
publishAdd()
方法复制到我的模型中,并用整个记录替换了
idAdded
。在方法体中,我将所有出现的
idAdded
替换为
record.id
。我很高兴!我在想,是否整个记录通常比身份证更受欢迎?通常整个记录都在调用
publishAdd()
的位置,无论如何都是可用的。您是否接受此更改后的拉取请求?可以使其向后兼容。