2016-01-22 123 views
1

我想運行一個簡單的腳本,將使用X射線刮一些數據,並將其插入到我的Events集合中。從流星服務器插入分貝服務器不工作

if (Meteor.isServer) { 
     var Xray = Meteor.npmRequire('x-ray'); 
     var xray = new Xray({ 
     version: "2.0.3" 
     }); 

     xray('http://www.events12.com/seattle/january/', '.qq', [{ 
     title: '.title', 
     date: '.date', 
     link: 'a @href', 
     allContent: '@html' 
     }])(function(err, content) { 

     for (var i = 0; i < content.length; i++) { 
      (function() { 

      console.log(i); 

      var newEvent = { 
       owner: 'me', 
       name: content[i].title, 
       date: content[i].date, 
       url: content[i].link, 
       createdAt: new Date(), 
       description: 'none' 
      }; 

      console.log(newEvent); 

      Events.insert(newEvent, function(err, data) { 
       console.log(err); 
       console.log(data); 
      }); 


      })(); 
     } 
     }); 
    } 

從x射線,取入內容回調具有所有對象的數組刮下數據,每個具有若干性質。當我嘗試將這些數據插入到我的Events集合中時,for循環會迭代一次然後退出,但不會顯示錯誤。如果我刪除了Events.insert(),循環就會一直循環。

我錯過了什麼?執行這樣的任務的正確方法是什麼?

+1

我希望在服務器控制檯中看到「Meteor代碼必須在光纖中,嘗試使用Meteor.bindEnvironment」的錯誤。 – user3374348

+1

你的事件模式是什麼樣的?我的猜測是匿名函數在插入調用中隱藏了一個異常。 –

+1

我打算試着重現這個問題,但是爲了避免添加軟件包,所以我只是提供了內容=假數據。它工作得很好。 X射線回調是否非阻塞?在所有數據可用之前嘗試插入可能存在問題? – terrafirma9

回答

0

Events.insert()被稱爲任何流星纖維以外。添加Meteor.bindEnvironment()並以回調形式提供整個功能修復了此問題。