Метеор: вставка работает только на клиенте, но не сохраняется в базе данных на стороне сервера

Я пытаюсь вставить документ в 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 и посмотреть, будет ли он запущен на сервере.

Другие вопросы по тегам