Я хочу создать бэкэнд-сервис, который контролирует коллекцию 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()
на сервере (и на самом деле он выходит из строя, если я попробую).
Вопрос: Есть ли способы «подписаться» на обновления коллекции на сервере?
Спасибо! Вы знаете, срабатывает ли обратный вызов MyCollection.after.insert, когда коллекция mongo обновляется извне? (как в случае, когда другие экземпляры метеор/узел обновляют его? – tivoni
Из моего понимания того, как работает манго (набор хвостов хвоста и реплики), я считаю, что это должно работать в этом сценарии. Другое обновление приложения mongo будет таким же, как если бы вы вошли в оболочку mongo и обновили элемент в коллекции. –
Есть два больших оговорки с этим ответом: (1) Я уверен, что крючки выполняются только в том экземпляре, на котором они были запущены - см. [эта проблема] (https: //github.com/matb33/meteor-collection-hooks/issues/165), (2) 'наблюдать' - отличное решение (я часто использую его для этих случаев), однако он часто ограничивает вас только прослушиванием один сервер. То есть, если два сервера называются «наблюдать», и оба они выполняли свой обратный вызов, это было бы приемлемо? –