在服务器上调用 Collection.insert 时,“Meteor 代码必须始终在 Fiber 内运行”

2023-11-30

我在 server/statusboard.js 中有以下代码;

var require = __meteor_bootstrap__.require,
    request = require("request")   


function getServices(services) {
  services = [];
  request('http://some-server/vshell/index.php?type=services&mode=json', function (error, response, body) {
    var resJSON = JSON.parse(body);
     _.each(resJSON, function(data) {
       var host = data["host_name"];
       var service = data["service_description"];
       var hardState = data["last_hard_state"];
       var currState = data["current_state"];
       services+={host: host, service: service, hardState: hardState, currState: currState};
       Services.insert({host: host, service: service, hardState: hardState, currState: currState});
    });
  });
}

Meteor.startup(function () {
  var services = [];
  getServices(services);
  console.log(services);
});

基本上,它从 JSON feed 中提取一些数据并尝试将其推送到集合中。

当我启动 Meteor 时,出现以下异常;

app/packages/livedata/livedata_server.js:781
      throw exception;
            ^
Error: Meteor code must always run within a Fiber
    at [object Object].withValue (app/packages/meteor/dynamics_nodejs.js:22:15)
    at [object Object].apply (app/packages/livedata/livedata_server.js:767:45)
    at [object Object].insert (app/packages/mongo-livedata/collection.js:199:21)
    at app/server/statusboard.js:15:16
    at Array.forEach (native)
    at Function.<anonymous> (app/packages/underscore/underscore.js:76:11)
    at Request._callback (app/server/statusboard.js:9:7)
    at Request.callback (/usr/local/meteor/lib/node_modules/request/main.js:108:22)
    at Request.<anonymous> (/usr/local/meteor/lib/node_modules/request/main.js:468:18)
    at Request.emit (events.js:67:17)
Exited with code: 1

我不太确定该错误意味着什么。有谁有任何想法,或者可以提出不同的方法?


仅将函数包装在 Fiber 中可能还不够,并且可能会导致意外行为。

原因是,与 Fiber 一样,Meteor 也需要一组附加到 Fiber 的变量。 Meteor 使用附加到光纤的数据作为动态范围,将其与第 3 方 api 一起使用的最简单方法是使用Meteor.bindEnvironment.

T.post('someurl', Meteor.bindEnvironment(function (err, res) {
  // do stuff
  // can access Meteor.userId
  // still have MongoDB write fence
}, function () { console.log('Failed to bind environment'); }));

如果您想了解更多信息,请观看这​​些视频:https://www.eventedmind.com/posts/meteor-dynamic-scoping-with-environment-variables https://www.eventedmind.com/posts/meteor-what-is-meteor-bindenvironment

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在服务器上调用 Collection.insert 时,“Meteor 代码必须始终在 Fiber 内运行” 的相关文章

随机推荐

  • 客户端分页在智能表中不起作用

    所以我得到了一个智能表 用于重新加载整个数据集 我需要它来绘制图表 但我不希望所有数据立即渲染 太多 所以在文档中有一个叫做 客户端分页 但由于某种原因这似乎不起作用 objectDataArr 0 保存整个数据集 我的模拟是 div cl
  • Java 8 中接口方法的隐式说明符/修饰符是什么?

    我知道接口方法是隐式的public Java 文档教程 says All abstract default and static接口中的方法有 隐含地public 因此您可以省略 public 修饰符 Java 8 中隐式声明了抽象 静态和
  • 将复选框列表添加到 UIAlertController

    我正在与UI警报控制器 现在我可以通过以下代码列出一个项目 UIAlertController controller UIAlertController alertControllerWithTitle Beds message prefe
  • PE 文件中没有 .BSS

    这是简短的控制台应用程序示例 static char buffer 4096 int main for int i 0 i lt 4096 i buffer i 1234 return 0 据我了解 编译器生成的 exe 文件应包含 bss
  • 将变量从 Main 函数传递到另一个 C# 类

    我正在用我的头撞墙 我想重复使用 C 控制台应用程序内的几个变量 但是 我一生都不能在另一个类中重复使用这些变量 我希望您能提供任何帮助或指示 我已经搜索了很长一段时间 但我完全被难住了 编辑 是的 变量位于我的 Main 函数内 抱歉忽略
  • GetFields 返回空数组

    有人能看到我在下面做错了什么吗 该类型具有服务方法尝试访问的公共属性 那么为什么反射没有获取它呢 Public class SomeClass private YetAnotherClass yetAnotherClass public S
  • 导入包含“导入”命令的模块有什么好处或坏处?

    如果我要创建一个名为的模块 例如imp mod py里面包含了我经常使用的所有 主观使用的 相关模块 将此模块导入到我的主程序中是否允许我访问其中包含的导入imp mod py 如果是的话 这会带来什么缺点 我想一个主要优点是减少导入时间
  • 如何设置PyQt5 QIntValidator的顶部和底部?

    我有一个像下面的代码一样的行编辑 在 3 个不同的代码中我有 2 个不同的问题 self rnr id num le QLineEdit self rnr id num le setValidator QIntValidator 99999
  • “auto int i”有效 C++11 吗?

    在回答中这个问题问题是传统的C关键字的含义auto 自动的 而不是static or extern存储 仍然有效C 11现在它意味着类型推导 我记得旧的意思是auto应该保留相关的内容 但其他人不同意 auto char c 42 eith
  • Gson忽略序列化排除策略

    序列化 public class Subclass extends Superclass private static final long serialVersionUID 1L private int someProperty publ
  • excel VBA如何在IE11上点击div的onclick事件

    我已经搜索了又搜索但没有找到任何解决方案来解决这个问题 如何触发 div 内的 onclick 事件 我通过使用标题和 getattribute 测试它 一切都正确 但它就是无法点击 IE document getElementById b
  • SQLite:防止重复

    我想创建一个表来存储设备设置 该表包含三行 id parameter name 和parameter value 该表是通过执行以下查询语句创建的 DATABASE CREATE create table DATABASE TABLE KE
  • 使用Java读取图像文件的有效方法

    我在用javax imageio ImageIO read 读取位于 Windows 临时位置的大小为 5 mb 的图像几乎需要 9 秒 PFB 是 Jprofiler 的屏幕截图 我想要一种更有效的方法 可以将时间减少到至少 2 3 秒
  • iPhone上收到通知时(不是点击打开通知后)会触发哪个方法?

    我现在正在使用didReceiveRemoteNotification然而 要获取从 Parse 推送的通知的有效负载 它仅在点击并打开通知时触发 我想做的是启动警报来提醒用户通知已到达 所以我想didReceiveRemoteNotifi
  • 如何在Python中的一行中追加多个项目

    I have count 0 i 0 while count lt len mylist if mylist i 1 mylist i 13 and mylist i 2 mylist i 14 print mylist i 1 mylis
  • Xcode 界面生成器中的图像资源大小

    如果我在 Xcode 中的界面构建器上添加图像视图 并且其大小为 200 x 100 Xcode 中的大小 我如何知道将图像资源设置为 1x 2x 和 3x 的大小 如果我在 3x 的 Photoshop 中将其设置为 600x300 像素
  • 在使用 Ajax 生成的表单上使用 jquery 验证插件

    使用 jQuery 验证插件时 如何验证使用 ajax 生成的表单 我的意思是问 当页面加载时 表单最初不会出现在页面上 而是使用ajax添加到页面中 我正在关注以下示例bassistance de jquery plugins jquer
  • iOS编辑tableview隐藏单元格中的子视图

    我有一个关于编辑 UITableView 的问题 我想知道当点击删除控件并出现删除按钮时如何隐藏子视图 我已经弄清楚如何在点击删除按钮时隐藏子视图 但为时已晚 我使用以下代码来完成该任务 void tableView UITableView
  • 如何使用 jOOQ 从模板生成带有参数顺序的 SQL?

    我使用 jOOQ 3 11 11 生成这样的 SQL 模板 DSLContext context new DefaultDSLContext conf Query query context select from table1 where
  • 在服务器上调用 Collection.insert 时,“Meteor 代码必须始终在 Fiber 内运行”

    我在 server statusboard js 中有以下代码 var require meteor bootstrap require request require request function getServices servic