0

現在、かなり苛立たしい問題を抱えています。

Meteor.http.get呼び出しを行うことはできますが、ループに入れると悪いことが起こります。

私は自分が何をしているのか100%確信が持てないので、どんなポインタも素晴らしいでしょう!

このコードは機能します-それはcoffeescriptです

Meteor.http.get("http://some_site.com/feed.rss", (error, results)->
  console.log "results: " + results.statusCode 
  if results.statusCode is 200
    console.log results.content
)

このコードはクラッシュします:

things.forEach( (thing) ->
  console.log thing.url  # it logs http://some_site.com/feed.rss
  Meteor.http.get(thing.url, (error, results) ->
    if results.statusCode is 200
      console.log results.content
  )
))

このエラーの場合:

node.js:201
    throw e; // process.nextTick error, or 'error' event on first tick
          ^
TypeError: Cannot read property '_meteor_dynamics' of undefined
at Object.bindEnvironment (app/packages/meteor/dynamics_nodejs.js:48:44)
at Object.call (app/packages/http/httpcall_server.js:72:25)
at Object.get (app/packages/http/httpcall_common.js:40:29)
at app/craftcandy.coffee.js:112:28
at app/packages/mongo-livedata/mongo_driver.js:307:7
at /usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/cursor.js:173:11
at [object Object].nextObject (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/cursor.js:485:5)
at Object.callback (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/cursor.js:478:12)
at Array.0 (/usr/local/meteor/lib/node_modules/mongodb/lib/mongodb/connection/server.js:197:36)
at EventEmitter._tickCallback (node.js:192:41)

コードで終了:1アプリケーションがクラッシュしています。ファイルの変更を待っています。

4

2 に答える 2

0

これは、meteor が内部で node.js を使用しており、node.js が非同期でノンブロッキングであるためと考えられます。

したがって、results.statusCode をチェックする代わりに、コールバックを入れることができます (私の coffeescript を許してください):

things.forEach( (thing) ->
   console.log thing.url  # it logs http://some_site.com/feed.rss
   Meteor.http.get(thing.url, (error, results) ->
      results.on('data', (d) ->
        //Do something here with the data stream
      )

      results.on('end', (rslts) ->
         //Do something here with the results stream, like log to console:
         console.log rslts.content
      )
   )
)

スクリプトの構文が間違っている場合は、事前に申し訳ありません。私が言ったように、私はコーヒースクリプトを(まだ)話せません。

しかし、あなたは要点を理解します。node.js questionからこれを共食いしました。うまくいくかどうか教えてください。

于 2012-04-26T16:24:39.053 に答える
0

あなたのコードに何か問題があるか、URL の形式が間違っている可能性があります。次のようにテストできます。

Things.find().forEach(function(thing){
  var url = thing.url;
  console.log("geting " + url);
  (function (_url){
    try{
      Meteor.http.get(_url, function(error, results){
        if(results.statusCode === 200){
          console.log("request success: " + _url);
        } else {
          console.log("request error: " + _url);
        }
      });
    } catch (e) {
      // if it gets here you probly have a malformed url
      console.log("meteor error!: "+_url);
    }
  })(url);
});

それをコーヒーストリップに翻訳する私の未テストの試みは次のとおりです。

Things.find().forEach (thing) ->
  url = thing.url
  console.log "geting: " + url
  go = (_url) ->
    try
      Meteor.http.get _url, (error, results) ->
        if results.statusCode is 200
          console.log "request success: " + _url
        else 
          console.log "request error: " + _url

    catch e
      # if it gets here you probly have a malformed url
      console.log "meteor error!: "+ _url

  go url
于 2012-04-26T16:53:06.390 に答える