我测试流星中的代码。有一些错误。
/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中是正常的。 为什么?我忘了什么吗?任何帮助表示赞赏。
答案 0 :(得分:0)
变量是作用域。在Meteor中Test
可用于您的meteor项目中的其他文件,而Npm.require
所需的Npm模块/内容无法使用它们。
children.js
与main.js
文件位于不同的名称空间。要访问其中的Test
变量,您需要将其传递给参数或作为消息。