【发布时间】:2016-04-28 15:00:33
【问题描述】:
我正在尝试运行一个简单的脚本,该脚本将使用 X 射线抓取一些数据并将其插入到我的事件集合中。
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 射线接收内容的回调将所有抓取的数据放在一个对象数组中,每个对象都有几个属性。当我尝试将此数据插入到我的事件集合中时,for 循环迭代一次然后退出,但没有显示错误。如果我删除Events.insert(),循环会一直迭代。
我错过了什么?执行此类任务的正确方法是什么?
【问题讨论】:
-
我希望在服务器控制台中看到类似“Meteor 代码必须在光纤中,尝试使用 Meteor.bindEnvironment”的错误。
-
您的事件架构是什么样的?我的猜测是匿名函数在您的插入调用中隐藏了一个异常。
-
我打算尝试重现这个问题,但想避免添加包,所以我只制作了 content = fake data。它工作得很好。 X 射线回调是非阻塞的吗?也许在所有数据可用之前尝试插入有问题?
标签: javascript mongodb meteor cron x-ray