Метеор: вставка работает только на клиенте, но не сохраняется в базе данных на стороне сервера
Я пытаюсь вставить документ в Activities
коллекция каждый раз, когда пользователь выполняет действие. Вот как я это настроил:
Вот мой createActivity
Метеор.метод в коллекциях / мероприятиях.coffee:
@Activities = new Mongo.Collection('activities')
Activities.allow
insert: (userId, activity) ->
activity.userId == userId
Meteor.methods
createActivity: (movieId, userId) ->
# if Meteor.isServer
# timer = Stats.createTimer("methods.createActivity")
Activities.insert {
docId: movieId
userId: userId
action: "favorite"
collection: "movies"
createdAt: new Date
}, (error, results) ->
console.log error, results
return
Вот где он вызывается, в другой коллекции - collection / lists.coffee. Это вызывается внутри другого Meteor.method
который вызывается при клике
Meteor.methods
toggleFavorited: (movieId) ->
if Meteor.isServer
timer = Stats.createTimer("methods.toggleFavorited")
user = Meteor.user()
return unless user?
favorited = Meteor.call('toggleInList', user.favorites, movieId)
if favorited
Meteor.call 'createActivity', movieId, Meteor.userId() #LOOK HERE !!!!!
Movies.update({mid: movieId}, {$inc: favorites: 1})
else
Movies.update({mid: movieId}, {$inc: favorites: -1})
if Meteor.isServer
timer.stop()
favorited
Вот моя публикация и подписка:сервер / публикаций. Кофе
Meteor.publish 'activities', ->
return Activities.find()
Библиотека / router.coffee
Router.configure
layoutTemplate: 'layout'
loadingTemplate: 'loading'
notFoundTemplate: 'notFound'
trackPageView: true
waitOn: ->
[
Meteor.subscribe("activities")
]
Вот журнал консоли, когда я выполняю действие пользователя, которое запускает метод вставки Activties:
Но документ не сохраняется в базе данных! Это почему?
Спасибо за вашу помощь
2 ответа
Как вы определили свою коллекцию? Вы случайно не указали в качестве аргумента значение null?
Activities = new Mongo.Collection(null)
создаст локальную коллекцию, которая не сохранилась
Activities = new Mongo.Collection("activities")
будет сохраняться на сервере
Можете ли вы поделиться своей структурой папок, потенциально ваш метод определен где-то, что метеор считает только клиентским кодом, который может объяснить, почему он не выполняется на сервере.
В моем проекте есть следующие папки:
/client/
/both <-- accessible to both client & server
/server <-- looks like you have this, server only code.
Если вы этого не сделаете, возможно, попробуйте переместить код метода в папку / both / lib и посмотреть, будет ли он запущен на сервере.