Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor插入/删除操作在从ZeroMQ回调调用时引发异常_Javascript_Node.js_Mongodb_Meteor_Zeromq - Fatal编程技术网

Javascript Meteor插入/删除操作在从ZeroMQ回调调用时引发异常

Javascript Meteor插入/删除操作在从ZeroMQ回调调用时引发异常,javascript,node.js,mongodb,meteor,zeromq,Javascript,Node.js,Mongodb,Meteor,Zeromq,当在指定的端口上接收到ZeroMQ消息时,以下Meteor代码段会出现barfs。但是,如果我将remove更改为find,则其工作正常插入操作也会失败。请注意,如果在回调之外运行,insert和remove成功,例如在部件上的拉动按钮下方 var Components = new Meteor.Collection("components"); function handle_message(msg) { console.log("pull on message" + msg);

当在指定的端口上接收到ZeroMQ消息时,以下Meteor代码段会出现barfs。但是,如果我将
remove
更改为
find
,则其工作正常<代码>插入操作也会失败。请注意,如果在回调之外运行,
insert
remove
成功,例如在
部件上的
拉动按钮下方

var Components = new Meteor.Collection("components");

function handle_message(msg) {
    console.log("pull on message" + msg);
    Components.remove();
}


if (Meteor.isServer) {
     Meteor.startup(function () {
        var zmq = Meteor.require("zmq");
        var pull = zmq.socket("pull");
        pull.bind("tcp://127.0.0.1:7000", function(data) {
           console.log("Connection received from ZMQ");
        });
        pull.on('message', handle_message);

    });
}
例外情况是:

W20130827-21:36:21.800(0)? (STDERR) packages/mongo-livedata.js:1640
W20130827-21:36:21.802(0)? (STDERR)         throw e;                                                              
W20130827-21:36:21.803(0)? (STDERR)               ^
W20130827-21:36:21.843(0)? (STDERR) TypeError: Cannot read property '_meteor_dynamics' of undefined
W20130827-21:36:21.843(0)? (STDERR)     at Object.Meteor.bindEnvironment (packages/meteor/dynamics_nodejs.js:55)
W20130827-21:36:21.845(0)? (STDERR)     at _.extend._wrapAsync (packages/meteor/helpers.js:108)
W20130827-21:36:21.845(0)? (STDERR)     at _.each.MongoConnection.(anonymous function) [as remove] (packages/mongo-livedata/mongo_driver.js:340)
W20130827-21:36:21.846(0)? (STDERR)     at _.each.Meteor.Collection.(anonymous function) [as remove] (packages/mongo-livedata/collection.js:406)
W20130827-21:36:21.846(0)? (STDERR)     at Socket.handle_message (app/web.js:5:16)
W20130827-21:36:21.847(0)? (STDERR)     at Socket.EventEmitter.emit (events.js:96:17)
W20130827-21:36:21.847(0)? (STDERR)     at Socket._flush._flushing (/home/vagrant/.meteorite/packages/npm/arunoda/meteor-npm/ad83acff83385d5ea05997c8bbc2d7493ba4c04e/.build/npm/node_modules/zmq/lib/index.js:358:25)
W20130827-21:36:21.852(0)? (STDERR)     at global.setImmediate (/home/vagrant/.meteorite/packages/npm/arunoda/meteor-npm/ad83acff83385d5ea05997c8bbc2d7493ba4c04e/.build/npm/node_modules/zmq/node_modules/set-immediate/setImmediate.js:15:9)
W20130827-21:36:21.852(0)? (STDERR)     at process.startup.processNextTick.process._tickCallback (node.js:245:9)
有人有什么想法吗?谢谢

我发现了一个解决问题的提示(尽管我还没有完全理解它)。在
Meteor.bindEnvironment
中包装回调可以消除错误并正确处理
remove
insert
。作为一名流星新手,我很乐意接受另一个答案,这个答案很好地解释了为什么/如何工作

var Components = new Meteor.Collection("components");

function handle_message(msg) {
    console.log("pull on message" + msg);
    Components.insert({"name": "foo", "state": "stopped"});
}

bound_handle_message = Meteor.bindEnvironment(handle_message, function(e) {
    console.log("exception! " + e); 
});

if (Meteor.isServer) {
     Meteor.startup(function () {
        var zmq = Meteor.require("zmq");
        var pull = zmq.socket("pull");
        pull.bind("tcp://127.0.0.1:7000", function(data) {
           console.log("Connection received from ZMQ");
        });
        pull.on('message', bound_handle_message);

    });
}
我发现了一个解决问题的提示(尽管我还没有完全理解它)。在
Meteor.bindEnvironment
中包装回调可以消除错误并正确处理
remove
insert
。作为一名流星新手,我很乐意接受另一个答案,这个答案很好地解释了为什么/如何工作

var Components = new Meteor.Collection("components");

function handle_message(msg) {
    console.log("pull on message" + msg);
    Components.insert({"name": "foo", "state": "stopped"});
}

bound_handle_message = Meteor.bindEnvironment(handle_message, function(e) {
    console.log("exception! " + e); 
});

if (Meteor.isServer) {
     Meteor.startup(function () {
        var zmq = Meteor.require("zmq");
        var pull = zmq.socket("pull");
        pull.bind("tcp://127.0.0.1:7000", function(data) {
           console.log("Connection received from ZMQ");
        });
        pull.on('message', bound_handle_message);

    });
}