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

tv6aics1  于 2023-04-11  发布在  Node.js
关注(0)|答案(1)|浏览(79)

我在glitch网站上有一个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'...事件,至少这是我希望的情况。但我没有设法使它工作。任何想法我如何才能使它工作?
(btw我知道使用像eval()这样的东西和我使用它的方式是一个坏主意,但这正是我在这里需要的,谢谢你XD)

pexxcrt2

pexxcrt21#

最后找到了解决方案,这里是无论如何,如果其他人可能会遇到同样的问题:

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]);
};

相关问题