Приложение удаленной оболочки Node.js - PullRequest
1 голос
/ 12 марта 2020

Я запрограммировал приложение удаленной оболочки (TCP-сервер) в NodeJS, используя модули . net и .readline . Клиенты могут подключаться к серверу с помощью командной консоли Te lnet. Но у меня возникают проблемы с реализацией метода rl.log , который ничего не записывает в клиентскую оболочку. Другие файлы (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);

РЕШЕНИЕ:

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

1 Ответ

0 голосов
/ 15 марта 2020

РЕШЕНИЕ

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