如何在流星中使用child_process.fork

时间:2013-12-23 05:51:42

标签: meteor

我测试流星中的代码。有一些错误。

/server/lib/Test.js

Test = {
    say:function(){
        console.log("hello world");
    }
}

/server/main.js

Meteor.startup(function(){
    Test.say();  //work well 
    var path = Npm.require('path');
    var base = path.resolve('.');
    var n = Npm.require('child_process').fork(base+"/app/server/children.js");
    n.on('message', function(m) {
      console.log('PARENT got message:', m);
    });
    n.send({ hello: 'world' });
});

/server/children.js

process.on('message', function(m) {
  Test.say();   //throw a error . The Test is undefined
  console.log('CHILD got message:', m);
  process.send({name:"ABC"});
});

process.send({ foo: 'bar' });

错误:

I20131223-16:34:44.717(8)? hello world
W20131223-16:34:44.784(8)? (STDERR) /home/ec/workspace/meteor/testChildrenProcess/.meteor/local/build/programs/server/app/server/children.js:2
W20131223-16:34:44.784(8)? (STDERR)   Test.say();
W20131223-16:34:44.785(8)? (STDERR)   ^
W20131223-16:34:44.785(8)? (STDERR) ReferenceError: Test is not defined
W20131223-16:34:44.787(8)? (STDERR)     at process. (/home/ec/workspace/meteor/testChildrenProcess/.meteor/local/build/programs/server/app/server/children.js:2:3)
W20131223-16:34:44.788(8)? (STDERR)     at process.EventEmitter.emit (events.js:98:17)
W20131223-16:34:44.788(8)? (STDERR)     at handleMessage (child_process.js:318:10)
W20131223-16:34:44.788(8)? (STDERR)     at Pipe.channel.onread (child_process.js:345:11)

在“/app/server/children.js”中未定义测试对象,这在main.js中是正常的。 为什么?我忘了什么吗?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

变量是作用域。在Meteor中Test可用于您的meteor项目中的其他文件,而Npm.require所需的Npm模块/内容无法使用它们。

children.jsmain.js文件位于不同的名称空间。要访问其中的Test变量,您需要将其传递给参数或作为消息。