process.send在Node.js中有条件地定义

时间:2015-06-02 00:36:21

标签: node.js

无论出于何种原因,在Node.js中,函数process.send在某些​​环境中定义,但在其他环境中未定义。例如,当我从Node.js中的父进程分叉子进程时,如:

//parent process
var cp = require('child_process');
var k = cp.fork('./child.js',['arg1','arg2','arg3']);
k.send('fail'); //k.send is defined...
process.send("ok, let's try this..."); //process.send is NOT defined

在子进程中:

//child.js
process.send('message');  //process.send is defined, and will send a message to the parent process above

为什么process.send在某些Node.js进程中有条件地定义而不是其他进程?看起来似乎是Node.js架构师的糟糕设计决定。

我知道如何解决这个问题的唯一方法是:

if(typeof process.send === 'function'){ 
process.send('what I want to send')
});

2 个答案:

答案 0 :(得分:16)

子进程有process.send方法与产生它们的进程进行通信,而根进程没有任何“父”进行通信,所以它不在那里。来自docs

  

在子进程中,进程对象将有一个send()方法,进程每次在其通道上收到消息时都会发出对象。

为了避免不得不“使用条件”丢弃代码,临时解决方案可能只是将“noop”函数放在可能产生进程的任何“根”文件顶部的位置:

process.send = process.send || function () {};

答案 1 :(得分:0)

使用 Sapper 和 Svelte 的解决方法:

基本上,当您在环境中提供 SAPPER_EXPORT 变量时,可以在流程中收到此错误。

有关问题的更多详细信息:https://github.com/Zimtir/SENT-template/issues/114