我在像这样的故障网站中有一个nodejs express服务器:
const express = require("express");
const app = express();
const port = 3000;
const server = app.listen(port, () =>
console.log(`app listening on port ${port}!`)
);
和一个 socket.io 连接:
const io = require("socket.io")(server);
以及一些代码在我的客户和正在进行的服务之间进行通信。像这样:
function input(cmd) {
//cmd is the recieving data recived from socket
if (cmd != 'exit') {
try {
eval(cmd);
} catch (e) {
console.log(e);
}
} else {
process.exit(0)
}
}
现在我需要通过套接字将我所有的 stdout/stderr 消息发送回我的一个网页。到目前为止,我的线索是使用
process.stderr/out/in
及其 .on('data'...
事件,至少我希望如此。但我没能成功。知道我如何让它工作吗?
(顺便说一句,我知道使用像 eval() 这样的东西以及我使用它的方式是个坏主意,但这正是我在这里需要的,谢谢 xD)
终于找到了解决方案,无论如何如果其他人可能会遇到同样的问题:
const originalStdoutWrite = process.stdout.write;
const originalStderrWrite = process.stderr.write;
process.stdout.write = (chunk, encoding, callback) => {
socket.emit('cli_out', chunk.toString());
originalStdoutWrite.apply(process.stdout, [chunk, encoding, callback]);
};
process.stderr.write = (chunk, encoding, callback) => {
socket.emit('cli_out', chunk.toString());
originalStderrWrite.apply(process.stderr, [chunk, encoding, callback]);
};