所有将readline保持在屏幕底部的尝试都会导致输入清除

时间:2018-01-20 23:08:35

标签: node.js readline

我目前正在尝试在屏幕底部保留一个输入,以便我可以在顶部保留日志,同时还允许命令。我发现在线工作的所有解决方案,但问题是每当我使用winston(和自定义传输)进行日志记录时,readline提示会清除,但会保持在底部。它并没有被清除,它只是清除它的视觉效果。如果您输入“abc”,但输入“a”后会有新的日志,并且您继续输入,提示只会显示“> bc”,但是当您按Enter键时,程序会正确识别该行作为“abc”。

这就是我现在正在处理的问题。

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

0 个答案:

没有答案