Node.js 所有将readline保持在屏幕底部的尝试都会导致输入清除
我目前正试图在屏幕底部保留一个输入,这样我就可以在顶部保留一个日志,同时也允许使用命令。我在网上找到的所有解决方案都有效,但问题是每当我使用winston(和自定义传输)登录时,readline提示符就会清除,但会一直保留到底部。它不是真的被清除了,它只是清除了它的视觉效果。如中所示,如果您正在键入“abc”,但在键入“a”后会有一个新的日志,并且您继续键入,则提示将仅显示“>bc”,但当您按enter键时,程序会正确地将该行识别为“abc” 这就是我现在要处理的事情Node.js 所有将readline保持在屏幕底部的尝试都会导致输入清除,node.js,readline,Node.js,Readline,我目前正试图在屏幕底部保留一个输入,这样我就可以在顶部保留一个日志,同时也允许使用命令。我在网上找到的所有解决方案都有效,但问题是每当我使用winston(和自定义传输)登录时,readline提示符就会清除,但会一直保留到底部。它不是真的被清除了,它只是清除了它的视觉效果。如中所示,如果您正在键入“abc”,但在键入“a”后会有一个新的日志,并且您继续键入,则提示将仅显示“>bc”,但当您按enter键时,程序会正确地将该行识别为“abc” 这就是我现在要处理的事情 //console.js
//console.js
const readline = require("readline");
module.exports = () => {
const cli = readline.createInterface(process.stdin, process.stdout);
const logger = require("./logger.js")(cli);
cli.setPrompt("> ", 2);
cli.on("line", (line) => {
logger.info(line);
cli.prompt();
});
cli.prompt();
return logger;
};
//logger.js
const winston = require("winston");
class ConsoleTransport extends require("winston-transport") {
log(info, callback){
setImmediate(() => { this.emit('logged', info); });
this.cli.output.write('\x1b[2K\r');
console.log(info.message);
this.cli._refreshLine();
callback();
}
}
module.exports = (cli) => {
let consoleTransport = new ConsoleTransport();
consoleTransport.cli = cli;
return winston.createLogger({
format: winston.format.combine(
winston.format.colorize(),
winston.format.simple()
),
transports: [
consoleTransport
]
});
};