在不同的路由hapi.js中生成并杀死node.js子进程

时间:2019-07-18 09:34:39

标签: node.js hapijs

我有两个路由的hapi.js服务器。其中一个应该产生一些子进程,而另一个应该杀死它。

var someFunc = require('./module.someFunc')

const Hapi = require('@hapi/hapi');

const { spawn } = require('child_process');

let child

const init = async () => {

 server.route({
  method: 'POST',
  path:'/start',
  handler: (request,h) => {
   child = spawn(someFunc());
  }
 })

 server.route({
  method: 'POST',
  path:'/stop',
  handler: (request,h) => {
   child.kill('SIGINT');
  }
 })
 await server.start();
}

init();

但是由于某些原因,我在控制台中出错:

TypeError: Cannot read property 'kill' of undefined

UPD:触发子进程时我也出现了错误:

TypeError [ERR_INVALID_ARG_TYPE]: The "file" argument must be of type string. Received type object

1 个答案:

答案 0 :(得分:0)

之所以发生这种情况是因为spawn抛出错误,因此child变量为 null ;


spawn需要一个命令,您不能使用child_process.spawn执行函数。

根据您的情况,您需要创建一个新文件,然后在其中创建函数并fork

child.js

while(something){
   do something
}

然后

const { fork } = require('child_process');
...
server.route({
  method: 'POST',
  path:'/start',
  handler: (request,h) => {
   child = fork('child.js');
  }
 })
...

请参考this link,以获取一些简单的示例以及有关如何使用child_process模块的说明

相关问题