2017-06-02 23 views
1

こんにちは皆、私の流星プロジェクトでIron Routerを使って1つのルートでコールバック機能を持っています。 エラー:繊維ずに待つことができませんエラー:ファイバーなしで待つことができません

1ページの「x」にこのコードこすり3000 /スクレーパー、コンソールには以下のメッセージを示しています

問題は、私はパスローカルホストを実行したときです。

Router.route('/scraper', function(){ 
    this.response.setHeader('Access-Control-Allow-Origin', '*'); 
    this.response.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); 
    this.response.setHeader('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, x-request-metadata'); 
    this.response.setHeader('Access-Control-Allow-Credentials', true); 

    var url = 'https://scholar.google.cl/citations?user= ... &hl=es'; 
    request(url, function(error, response, html){ 
    if(!error){ 
     var $ = cheerio.load(html); 

     var json_pre = { id_usuario: "", 
         autor : "", 
         imagen_usuario: "" 
        }; 

     $('#gsc_prf_in').filter(function(){ 
     var data = $(this); 
     autor = data.text().trim(); 

     json_pre.autor = autor; 
     }) 

     $('input[name="user"]').filter(function(){ 
     var data = $(this); 
     id_usuario = data.val(); 

     json_pre.id_usuario = id_usuario; 
     }) 

     $('#gsc_prf_pup').filter(function(){ 
     var data = $(this); 
     imagen_usuario = data.attr('src'); 

     json_pre.imagen_usuario = imagen_usuario; 
     }) 

     ..... 

    } 

    var json = JSON.stringify(json_pre, null, 4); 

    //************************************************ 


          //Can't wait without a fiber 

     var id_usuario_m = Scrapers.findOne({id_usuario :json_pre.id_usuario }); 
     if (id_usuario_m) { 
     Scrapers.update({id_usuario :json_pre.id_usuario }, {$set: json_pre}); 
     console.log('Usuario Actualizado'); 
     } else { 
     Scrapers.insert(json_pre); 
     console.log('Usuario Insertado') 
     } 

    //************************************************ 


    }) 

    this.response.end('Fin de la scrapeada'); 

}, {where : "server"}); 

誰かが私を助けることができたら、私はとても感謝しています。 ありがとうございました。

答えて

1

要求ライブラリは、サーバー上でのみ動作するノードライブラリです。流行のノードライブラリを実行して、requireのような非同期コールバックが必要な場合は少し触れてください。

メテオールは、いわゆるファイバーですべてを実行します。 javascriptの約束と同等です。これにより、Meteorコンテキストのすべてのサーバサイドコードがデフォルトで同期化され、コードの読み込みが容易になります。しかしnodejsは、繊維を使用していないので、あなたはこのような彼らのコールバック関数をラップする必要があります。

request(url, Meteor.bindEnvironment(function(error, response, html){ 
    //Run stuff 
})); 

しかし、あなたが流星を使用しているため。なぜHTTPライブラリを使用しないのですか?これは、ノードのリクエストライブラリと同様に動作しますが、クライアント側と既に利用可能なクライアントに対しても機能します。

HTTP.get(url, function(error, result) { 
    //Do stuff 
}); 
関連する問題