简体   繁体   English

远程 Shell 应用程序 Node.js

[英]Remote Shell Application Node.js

I have programmed a Remote Shell Application (TCP server) in NodeJS using the .net and .readline modules.我已经使用.net.readline模块在NodeJS 中编写了一个远程外壳应用程序(TCP 服务器)。 Clients can connect to the server using the Telnet command console.客户端可以使用 Telnet 命令控制台连接到服务器。 But I'm having trouble implementing the rl.log method which doesn't write anything in the client shell.但是我在实现rl.log方法时遇到了麻烦,该方法不会在客户端 shell 中写入任何内容。 The other files (cmds_user.js, cmds_quiz, js, cmds_favs.js) are not relevant, they work perfectly when running the program locally (without the TCP Server implementation).其他文件(cmds_user.js、cmds_quiz、js、cmds_favs.js)不相关,它们在本地运行程序时完美运行(没有 TCP 服务器实现)。

const net = require('net');
const user = require("./cmds_user.js");
const quiz = require("./cmds_quiz.js");
const favs = require("./cmds_favs.js");
const readline = require('readline');

let port = 8080;

let server = net.createServer((socket) =>{

  let rl = readline.createInterface({
    input:socket,
    output:socket,
    prompt: ">"
  });

  socket.on('end',()=>{rl.close();});
  socket.on('error',()=>{rl.close();});

  rl.log = async (msg) => {
    await rl.write(msg);
  };

  rl.prompt();

  rl.questionP = async function (string) {   // Add questionP to rl interface
    return new Promise ( (resolve) => {
      this.question(`  ${string}: `, (answer) => resolve(answer.trim()))
    })
  };

  rl.on('line', async (line) => {
    try{
      let cmd = line.trim()

      if      ('' ===cmd)   {}
      else if ('h' ===cmd)  { user.help(rl);}

      else if (['lu', 'ul', 'u'].includes(cmd)) { await user.list(rl);}
      else if (['cu', 'uc'].includes(cmd))      { await user.create(rl);}
      else if (['ru', 'ur', 'r'].includes(cmd)) { await user.read(rl);}
      else if (['uu'].includes(cmd))            { await user.update(rl);}
      else if (['du', 'ud'].includes(cmd))      { await user.delete(rl);}

      else if (['lq', 'ql', 'q'].includes(cmd)) { await quiz.list(rl);}
      else if (['cq', 'qc'].includes(cmd))      { await quiz.create(rl);}
      else if (['tq', 'qt', 't'].includes(cmd)) { await quiz.test(rl);}
      else if (['uq', 'qu'].includes(cmd))      { await quiz.update(rl);}
      else if (['dq', 'qd'].includes(cmd))      { await quiz.delete(rl);}

      else if (['lf', 'fl', 'f'].includes(cmd)) { await favs.list(rl);}
      else if (['cf', 'fc'].includes(cmd))      { await favs.create(rl);}
      else if (['df', 'fd'].includes(cmd))      { await favs.delete(rl);}

      else if ('e'===cmd)                       { rl.log('Bye!'); socket.destroy()}
      else                                      { rl.log('UNSUPPORTED COMMAND!'); user.help(rl);}

    } catch (err) {
      rl.log(`  ${err}`);
    } finally {
      rl.prompt();
    }
  });

});
server.listen(port);

SOLUTION:解决方案:

rl.log = (msg) => {socket.write(`${msg}\n`);};

解决方案

rl.log = (msg) => {socket.write(`${msg}\n`);};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM