7

以下のコードが次のエラーをスローする理由を誰か教えてもらえますか? :

Error: A method named '/players/insert' is already defined 

Meteor と coffeescript は初めてなので、単純なものを見落としている可能性があります。

コーヒースクリプトへのリーダーボードの例の私の移植は次のとおりです。

###
Set up a collection to contain player information. On the server,
it is backed by a MongoDB collection named "players."
###
Players = new Meteor.Collection("players")

if Meteor.is_client
  Template.leaderboard.players = ->
    Players.find({}, {sort: {score: -1, name: 1}})

  Template.leaderboard.selected_name = ->
    player = Players.findOne(Session.get "selected_player")
    player and player.name

  Template.player.selected = -> if Session.equals("selected_player", this._id) then "selected" else ''

  Template.leaderboard.events = {
    'click input.inc': ->
      Players.update(Session.get("selected_player"), {$inc: {score: 5}})
  }

  Template.player.events = {
    'click': ->
      Session.set("selected_player", this._id)
  }

# On server startup, create some players if the database is empty.
if Meteor.is_server
  Meteor.startup ->
    if Players.find().count() is 0
      names = [
                "Ada Lovelace"
                "Grace Hopper"
                "Marie Curie"
                "Carl Friedrich Gauss"
                "Nikola Tesla"
                "Claude Shannon"
              ]
      Players.insert({name: name, score: Math.floor(Math.random()*10)*5}) for name in names

完全なスタック トレースは次のとおりです。

[[[[[ ~/dev/meteor/leaderboard ]]]]]

Running on: http://localhost:3000/

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: A method named '/players/insert' is already defined
    at app/packages/livedata/livedata_server.js:744:15
    at Function.<anonymous> (app/packages/underscore/underscore.js:84:24)
    at [object Object].methods (app/packages/livedata/livedata_server.js:742:7)
    at new <anonymous> (app/packages/mongo-livedata/collection.js:111:13)
    at app/leaderboard.js:4:11
    at /Users/alex/dev/meteor/leaderboard/.meteor/local/build/server/server.js:109:21
    at Array.forEach (native)
    at Function.<anonymous> (/Users/alex/dev/meteor/leaderboard/.meteor/local/build/server/underscore.js:76:11)
    at /Users/alex/dev/meteor/leaderboard/.meteor/local/build/server/server.js:95:7
Exited with code: 1

Meteor バージョン 0.4.0 (8f4045c1b9) を実行しています

よろしくお願いします。

4

3 に答える 3

12

You would also get this error, regardless of using coffeescript or plain javascript, if you duplicated your files. For example, copying your sources files to a subdirectory named Backup would produce this error, because Meteor merges files from subdirectories.

于 2012-10-23T16:43:42.140 に答える
0

移動してみてください(つまり、オリジナルをコピーして削除します)

Players = new Meteor.Collection("players")

1回は下 if Meteor.is_client に、もう1回は下にif Meteor.is_server

私はMeteorも初めてなので、正確な理由はわかりませんが、それは私にとってはうまくいきました.スコープ外で宣言しても同じことを行う必要がありますが、サーバー側にはクライアントと同様に独自の参照が必要だと思います(おそらくバグです。まだ 0.5.0 preview であることを覚えておいてください。アップグレードして、新しいバージョンの新しいスマート パッケージを試してみたいと思うかもしれません。0.4 を使用しているように見えますが、ファイルが私のサーバーでは何も認識されませんでした meteor のルートディレクトリを定義し (これらのファイルをクライアントとサーバーの両方にプッシュします)、サーバー自身の参照を定義しましたが、同じエラーが発生し、'public' 宣言を移動するまではサーバーとクライアントにそれぞれ独自のコピーを与えるための参照の、何も機能しませんでした。

うまくいけば、それは役に立ちます...

于 2012-10-20T16:10:11.310 に答える
0

これは、coffeelint (npm でグローバルにインストール) の構成の問題のようです。

私は元々、coffeescript コードが正しく、エラーがないことを確認するために coffeelint をインストールしました。

次の手順に従って、coffeelint をインストールしました。

sudo npm install -g coffeelint

.coffee ファイルに対してスタンドアロンで実行すると、coffeelint は正常に機能しました。

ただし、coffeescript パッケージを追加して Meteor プロジェクトを実行すると、上記のエラーが発生しました。

気まぐれで、エラーは既存のノードのインストールとの競合が原因である可能性があると思いました。

最初にcoffeelintをアンインストールすることにしました:

sudo npm uninstall -g coffeelint

その後、以前に meteor によって生成された Leaderboard.js ファイルを削除しました。

meteor を再起動した後、上記の coffeescript の例はエラーなく期待どおりに機能しました。

于 2012-09-21T14:45:49.000 に答える