在不同的路径 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
我的 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