【问题标题】:How to get added record (not just the id) through publishAdd()-notification?如何通过 publishAdd()-notification 获取添加的记录(不仅仅是 id)?
【发布时间】:2014-05-21 05:34:36
【问题描述】:

每个Sails.js 模型都有publishAdd() 方法。这会在将新记录添加到关联模型时通知每个侦听器。

此通知不包含新创建的记录。所以我必须从客户端发起另一个请求来获取新记录。

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

解决方案

我意识到接受的答案是这样的: https://gist.github.com/openscript/7016c5fd8c5053b5e3a3

【问题讨论】:

    标签: sails.js waterline


    【解决方案1】:

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

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

    我会从copying the default publishAdd() method 开始,然后根据需要进行调整。

    【讨论】:

    • 感谢您快速准确的回答。我只是将publishAdd() 方法复制到我的模型中,并将idAdded 替换为整个记录。在方法主体中,我将所有出现的idAdded 替换为record.id。我很高兴!
    • 我在考虑是否通常需要整个记录而不仅仅是 ID?通常整个记录都在调用publishAdd() 的位置,无论如何都可用。你会接受一个拉取请求,这个改变吗?可以使其向后兼容。
    【解决方案2】:

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

    假设您有一款游戏想要让您的玩家订阅。游戏有通知,一组文本警报,您只希望游戏中的玩家收到。为此,请通过请求在客户端订阅 Game。在这里,我通过调用 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 和通知记录,因此我可以在 Notification 模型中添加以下内容:

    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"}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2012-12-14
      • 1970-01-01
      • 2015-10-30
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多