Получение незапрошенного ввода в NodeJS

Я пытаюсь получить незапрошенный ввод от пользователя на сервере NodeJS. Причина в том, что я хочу иметь возможность отправлять строки, которые можно интерпретировать как команды во время работы сервера, например команды для очистки кеша.

Первоначально я использовал readline следующим образом:

import * as ReadLine from 'readline';

export default function InitTerminal() {
    const terminal = ReadLine.createInterface({
        input: process.stdin,
        terminal: false
    });

    terminal.on('line', (input) => {
        console.log(input);
        switch(input.toString()) {
            default:
                console.log('Unknown Command');
                break;
        }
    });
}

Проблема заключалась в том, что после большинства входных данных я получил бы:

rl.on line * input *

Где * input * относится к строковому представлению ввода буфера из process.stdin. Странно то, что онлайн-линия срабатывает только изредка, и обычно я получаю эту строку, а мой слушатель не срабатывает. То же самое происходит, когда я не использую ReadLine, а просто добавляю прослушиватель в process.stdin. Что-то запускает узел для вывода вышеприведенного вывода. Я использую узел 11.12.0 и ts-node-dev для машинописного текста в режиме разработки.

Итак, я спрашиваю, как я могу использовать узел для получения ввода без подсказки в виде команд? Либо изменив мой исходный код, либо каким-либо образом, о котором я не подумал.

Доброе спасибо.


person Sammi3    schedule 15.08.2019    source источник


Ответы (1)


Проблема заключалась в том, что ts-node-dev работает с файлом stdin. Это означает, что при его использовании сложно получить стандартный ввод. Что мне нужно было сделать, так это создать скрипт npm с именем build:dev, который скомпилировал мой машинописный текст, а затем запустил его. Тогда я мог бы спокойно использовать process.stdin.

Способ просмотра возможных изменений при этом - использовать nodemon вместо ts-node-dev и просто скомпилировать машинописный текст, когда это необходимо.

person Sammi3    schedule 15.12.2019