node.js,快速服务器,我也需要将我在控制台中看到的 stderr 发送到我的网页

问题描述 投票:0回答:1

我在像这样的故障网站中有一个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)

node.js express stdio
1个回答
0
投票

终于找到了解决方案,无论如何如果其他人可能会遇到同样的问题:

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]);
};
© www.soinside.com 2019 - 2024. All rights reserved.