我有两个路由的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
答案 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
模块的说明