2016-01-18 6 views
1

Я хочу создать бэкэнд-сервис, который контролирует коллекцию mongodb для новых записей. Когда они создаются, я хочу запустить обработку и обновить их. Я думал, что делать это с помощью сервиса/приложения Meteor было бы разумной идеей, поскольку Meteor использует «хвост хвоста», который кажется идеальным для этой цели (я бы предпочел избежать опроса, если это возможно).Meteor.subscribe на стороне сервера

Таким образом, я решил создать минимальное приложение на стороне сервера, которое должно решить его. Поэтому в основном, мне нужно что-то вдоль этих линий:

if (Meteor.isServer) { 
    MyCollection = new Mongo.Collection('myCollection'); 
    Meteor.publish('myCollectionPub', function() { 
     return MyCollection.find({ some: criteria... }); 
    } 
    // is there such a thing? 
    Meteor.serverSideSubscribe('MyCollectionPub', 
     function (newDocs) { 
      // process/update newDocs 
    }); 
} 

Согласно the Meteor docs, я не могу использовать Meteor.subscribe() на сервере (и на самом деле он выходит из строя, если я попробую).

Вопрос: Есть ли способы «подписаться» на обновления коллекции на сервере?

ответ

2

Альтернативой @tarmes предложение является пакет коллекторно-крюки, однако, как отметил Дэвид Уэлдон, он будет срабатывать только в случае его запуска в:

https://github.com/matb33/meteor-collection-hooks

MyCollection.after.insert(function (userId, doc) { 
    // ... 
}); 

Если вы нужно запустить его, даже если другой экземпляр внес изменения в базу данных монго, вы можете увидеть курсор, который возвращается из вашей коллекции:

MyCollection.find({created_at : {$gt: some_current_time}}).observe({ 
    added: function(item) { 
     // Alert code 
    } 
}); 
+1

Спасибо! Вы знаете, срабатывает ли обратный вызов MyCollection.after.insert, когда коллекция mongo обновляется извне? (как в случае, когда другие экземпляры метеор/узел обновляют его? – tivoni

+0

Из моего понимания того, как работает манго (набор хвостов хвоста и реплики), я считаю, что это должно работать в этом сценарии. Другое обновление приложения mongo будет таким же, как если бы вы вошли в оболочку mongo и обновили элемент в коллекции. –

+1

Есть два больших оговорки с этим ответом: (1) Я уверен, что крючки выполняются только в том экземпляре, на котором они были запущены - см. [эта проблема] (https: //github.com/matb33/meteor-collection-hooks/issues/165), (2) 'наблюдать' - отличное решение (я часто использую его для этих случаев), однако он часто ограничивает вас только прослушиванием один сервер. То есть, если два сервера называются «наблюдать», и оба они выполняли свой обратный вызов, это было бы приемлемо? –

Смежные вопросы