【问题标题】:Insert to db from Meteor server not working从 Meteor 服务器插入数据库不起作用
【发布时间】: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


【解决方案1】:

Events.insert() 在任何 Meteor 光纤之外被调用。添加Meteor.bindEnvironment() 并将整个函数作为回调提供给解决了这个问题。

【讨论】:

    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多