如何解决如何在生成子进程中捕获错误?
我遇到了一个问题,我无法捕获在派生子进程中引发的错误。 如果我运行以下server.js,则期望得到以下结果,
URL localhost:8080/
和http://localhost:8080/spawn
应该会产生成功消息,而
localhost:8080/simpleerror
&& localhost:8080/spawnerror
应该产生错误消息。
但是localhost:8080/spawnerror
正在生成成功消息,因为我无法在生成过程执行中捕获错误。即使没有陷入 error 事件中。如何在此处捕获生成过程错误?
如果我应该在这里使用stderr,则在使用nodemon调试器时,将在stderr数据中接收与侦听相关的消息。如何显式侦听错误?
server.js
var http = require('http');
const {
spawn
} = require('child_process');
http.createServer(async function (req,res) {
let url = req.url;
switch (url) {
case '/':
res.write("Success!!");
res.end();
break;
case '/simpleerror':
try {
req.hsd.djdj();
res.write("Success!!");
res.end();
} catch (err) {
res.write("Error::" + err.message);
res.end();
}
break;
case '/spawn':
try {
await execCmd(res,"ls");
res.write("\nSuccess!!");
res.end();
} catch (err) {
res.write("Error::" + err.message);
res.end();
}
break;
case '/spawnerror':
try {
await execCmd(res,"lsss");
res.write("\nSuccess!!");
res.end();
} catch (err) {
res.write("Error::" + err.message);
res.end();
}
break;
}
}).listen(8080);
async function execCmd(res,command,args = [],options = {}) {
const promise = new Promise((resolve,reject) => {
options.shell = true; // This includes support for windows
const spawnProcess = spawn(command,args,options);
spawnProcess.stdout
.setEncoding('utf8')
.on('data',(data) => {
res.write(data);
});
spawnProcess.stderr
.setEncoding('utf8')
.on('data',(msg) => {
res.write(msg);
});
spawnProcess.on('error',(err) => {
throw err;
});
spawnProcess.on('close',() => {
res.write('closed');
resolve();
});
spawnProcess.on('exit',() => {
res.write('Exitted - Listened from Spawn Process');
});
});
promise.catch((err) => {
res.write(err.message);
});
return promise;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。