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

Spawn and kill node.js child processes in different routes hapi.js

我的 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

发生这种情况是因为 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');
  }
 })
...

有关如何使用 child_process 模块

的一些简单示例和说明,请参阅 this link