【问题标题】:Meteor js - unable to insert data on Mongo through consoleMeteor js - 无法通过控制台在 Mongo 上插入数据
【发布时间】:2016-12-08 15:06:33
【问题描述】:

我正在学习 Meteor 的 udemy 课程。

复制我的问题的步骤:

1) 在 CMD 上:

meteor create Leaderboard
cd Leaderboard
meteor npm install
meteor run
(server starts, localhost:3000)

2) 然后,我删除了 main.css、main.html 和 main.js 的内容(在客户端文件夹下)。

3) 打开 main.js 并添加以下行:

PlayersList = new Mongo.Collection('players');

在 Chrome 的控制台上,我输入了“PlayersList”并得到以下信息:

M…o.Collection {_transform: null, _connection: Connection, _collection: LocalCollection, _name: "players", _driver: LocalCollectionDriver…}

问题

当我在控制台上输入这个时:

PlayersList.insert({ name: 'David', score: 0 });

这是错误:

"eebRFhA9vbSfHzPKk"
meteor.js?hash=e3f53db…:930 insert failed: Method '/players/insert' not found

为什么我会得到它?我按照教练提供的确切步骤进行操作。这里有什么问题?

【问题讨论】:

  • 什么是发布/订阅?你有不安全感吗?
  • 我已经完成了上面描述的确切步骤,我对此有点陌生,从我读过的内容来看,除非删除,否则默认情况下不安全是打开的。我要试试。编辑:刚刚停止服务器并删除了不安全的,同样的事情发生了。

标签: javascript mongodb meteor meteor-blaze


【解决方案1】:

该错误是由于该集合尚未在服务器上定义,仅在客户端上。

meteor create app 创建的默认应用包含两个main.js 文件,一个在client 中,一个在server 文件夹中。这些特别命名的文件夹完全按照您的预期工作 - 其中的内容仅加载到客户端或服务器上。显然,您仅将集合定义添加到 client 中的那个。要解决此问题,如果您将文件放在这些特殊命名的文件夹之外 - 比如说创建一个名为 collections 的文件夹,然后在其中添加一个 PlayersList.js 文件并在那里定义您的集合,那么两者都将加载它并工作。

如果您将定义集合的文件放入名为 imports 的文件夹中,或者(这是开发较大应用程序时推荐的方法),那么您可以将 import 分别放到您的服务器和客户端代码中,而不是 Meteor自动包含它。您可以阅读有关 Meteor 应用程序结构的更多信息here

【讨论】:

  • 我不知道你必须这样做。无论如何,根据您的指示,我在根目录中创建了一个名为“imports”的文件夹,添加了一个新文件“leaderboard.js”并在那里添加了我的收藏。之后,我将“imports/leaderboard.js”导入客户端和服务器。现在我收到以下错误:insert failed: Access denied
  • 在创建时使用 --bare 选项从头开始。现在工作正常。
  • @Rosenberg 你显然已经删除了insecure 包。一旦你这样做了,你需要定义额外的规则来允许插入。但你稍后会谈到。祝你学习 Meteor 好运:)
  • 我找到了一种更简单的方法来解决它,只需将 PlayersList = new Mongo.Collection('players');在服务器文件夹的 main.js 中
【解决方案2】:

试试这个:- PlayersList._collection.insert({ name: 'David', score: 0 });

【讨论】:

  • 你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
相关资源
最近更新 更多