Javascript Meteor:仅在客户端插入,而不在服务器端数据库中持久化
每次用户执行操作时,我都试图将文档插入到Javascript Meteor:仅在客户端插入,而不在服务器端数据库中持久化,javascript,meteor,coffeescript,Javascript,Meteor,Coffeescript,每次用户执行操作时,我都试图将文档插入到Activities集合中。下面是我如何设置它的: 这是我的createActivityMeteor.method(在集合/活动中)。咖啡: @Activities = new Mongo.Collection('activities') Activities.allow insert: (userId, activity) -> activity.userId == userId Meteor.methods createAct
Activities
集合中。下面是我如何设置它的:
这是我的createActivity
Meteor.method(在集合/活动中)。咖啡:
@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
这里是在另一个集合中调用它的地方--集合/列表。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.configure
layoutTemplate: 'layout'
loadingTemplate: 'loading'
notFoundTemplate: 'notFound'
trackPageView: true
waitOn: ->
[
Meteor.subscribe("activities")
]
lib/router.coffee
Meteor.publish 'activities', ->
return Activities.find()
Router.configure
layoutTemplate: 'layout'
loadingTemplate: 'loading'
notFoundTemplate: 'notFound'
trackPageView: true
waitOn: ->
[
Meteor.subscribe("activities")
]
以下是我执行触发Activties insert方法的用户操作时的控制台日志:
但是该文档不会持久保存在数据库中!为什么呢
感谢您的帮助如果您能够共享您的文件夹结构,meteor可能会认为您的方法定义在某个地方,这可能是唯一特定于客户端的代码,可以解释为什么它无法在服务器上执行 我的项目有以下文件夹:
/client/
/both <-- accessible to both client & server
/server <-- looks like you have this, server only code.
/client/
/都你是如何定义你的收藏的?你有没有碰巧通过了null作为论点
Activities = new Mongo.Collection(null)
将创建一个未持久化的本地集合
Activities = new Mongo.Collection("activities")
将保留在服务器上谢谢分享您的直觉!但我看不出这个问题的相关性,因为我没有更新任何记录。我遗漏了什么吗?我遇到了同样的问题。你找到解决方案了吗?我的文件夹结构是/client//collections//server/
等等。。。这些Meteor.methods是在collections文件夹中的一个文件中定义的——应该在客户端和服务器端都可用。我将其定义为Activities=new Mongo.Collection(“Activities”)
…刚刚添加到我的问题中以查看完整的上下文。嘿,我已经尝试复制了你的问题,但似乎效果不错,请参见(运行一次,然后更改某些内容,点击save并查看服务器是否返回最初插入的文档)。您如何确定文档未持久化?您是否在运行应用程序时使用meteor mongo检查了数据库?哇,感谢您复制它!是的,我在mongo运行时检查了它,但文档未持久化。它似乎只是默默地失败了。