Meteor Mongo 集合 payments/insert 已定义

Meteor Mongo Collection payments/insert is already defined

首先,很抱歉我没有更多的描述,但它是某种模糊的 Meteor 1.2 错误。至少对我来说,因为我是新手。

基本上,我正在创建一个单页内联网应用程序,用于轮询 paysimple.com API,将结果存储在 MongoDB 中,并让 Meteor 使用其反应魔法将新结果推送到页。

起初我以为这与这个问题有关:

因为我在使用 "Transactions" 这个词并且以为我打了一个关键字,但我重写了代码以使用 "Payments" 这个词。

这里是错误

W20150928-18:57:59.477(-7)? (STDERR)
W20150928-18:57:59.478(-7)? (STDERR) /Users/robert/.meteor/packages/meteor-tool/.1.1.8.1ywvo10++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:245
W20150928-18:57:59.478(-7)? (STDERR)                        throw(ex);
W20150928-18:57:59.478(-7)? (STDERR)                              ^
W20150928-18:57:59.548(-7)? (STDERR) Error: A method named '/payments/insert' is already defined
W20150928-18:57:59.548(-7)? (STDERR)     at livedata_server.js:1536:15
W20150928-18:57:59.548(-7)? (STDERR)     at Function._.each._.forEach (packages/underscore/underscore.js:113:1)
W20150928-18:57:59.548(-7)? (STDERR)     at [object Object]._.extend.methods (livedata_server.js:1532:7)
W20150928-18:57:59.548(-7)? (STDERR)     at [object Object].Mongo.Collection._defineMutationMethods (packages/mongo/collection.js:923:1)
W20150928-18:57:59.549(-7)? (STDERR)     at new Mongo.Collection (packages/mongo/collection.js:214:1)
W20150928-18:57:59.549(-7)? (STDERR)     at components/App.jsx:3:17
W20150928-18:57:59.549(-7)? (STDERR)     at /Users/robert/dev/paysimple-meteor/.meteor/local/build/programs/server/app/components/App.jsx:66:4
W20150928-18:57:59.549(-7)? (STDERR)     at /Users/robert/dev/paysimple-meteor/.meteor/local/build/programs/server/boot.js:242:10
W20150928-18:57:59.549(-7)? (STDERR)     at Array.forEach (native)
W20150928-18:57:59.549(-7)? (STDERR)     at Function._.each._.forEach (/Users/robert/.meteor/packages/meteor-tool/.1.1.8.1ywvo10++os.osx.x86_64+web.browser+web.cordova/mt-os.osx.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)

项目在github: https://github.com/rbaindourov/paysimple-meteor

从错误消息来看,您似乎多次实例化了同一个集合。或者定义一个干扰集合操作方法的服务器端方法。

我已经查看了您的代码,但遗憾的是我无法调用外部 API(我没有也无法获得 Paysimple 帐户 - 仅限美国居民),因此无法真正重现行为。

当我在服务器代码 (init.js) 的支付中简单地插入一些东西时,我没有收到错误。

我向任意页面发出了获取请求,并且能够将结果存储到同一个集合中,没有出现错误。

起初你的:

Payments.update( {Id:item.Id}, {$set:item}, {upsert:true} );

对我来说看起来有点陌生,但我已经测试过了,它按预期工作。我会做的:

Payments.upsert({Id: item.Id}, item);

我的最终猜测是,通过查看您的 run 脚本,这可能与您 运行 应用程序针对的 Mongo 实例有关。

我会尝试删除外部 MongoDB 和 运行 带有集成应用程序的应用程序。只需省略 MONGO_URL env 变量声明。

祝你好运。

错误确实自行消失了!有点。

Crenshinibon,你是对的,我确实有多个集合声明,一次在 server/init.js 一次在 components/App.jsx 一次。

但是当我重构代码以获得 /lib/collections.js 时,错误仍然存​​在。这是我所有的预感不断被流星缓存无效的主要问题。

直到我将 Task.jsx 重命名为 LineItem.jsx 并在整个应用程序中反映了该更改,错误才消失。

确认存在某种缓存机制使我的错误一直存在,该问题已通过一些先前的重构解决。

因此,我不知道到底是什么更改清除了错误,更改了集合名称,或将其声明移动到一个全局 lib 文件中。

我已经在这里通知了 meteor 团队: https://forums.meteor.com/t/meteor-clear-cache/10507

他们似乎同意这是一个问题。

再次感谢大家,我很抱歉在我修复错误之前没有犯错误。我正在疯狂写代码,它就这么消失了