2016-01-22 120 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()并以回调形式提供整个功能修复了此问题。