Neste post vamos fazer um hands-on é de um módulo padrão com o core do node: o readline.
O que temos que fazer?
Vamos importar primeiro o readline e instanciar um novo readline.
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stout
})
Como o readline é um modulo que permite que lidemos com entrada e saída, podemos atrelar um readable stream no input e output padrão.
Pra que serve isso?
Podemos construir várias ‘ferramentinhas’ com o readline, a principal delas é a seguinte:
rl.on('line', (line)==>{
console.log('line >>', line)
})
E toda vez que eu digitar algo, ele irá retornar o que escrevi adicionando o que esta no line. Mas não é só isso. Podemos saber, por exemplo, se o usuário apertou Ctrl+C para fechar o prompt:
rl.on('line', (line)==>{
console.log('line >>', line)
})
rl.on('SIGINT', () => {
console.log('bye'),
rl.pause()
})
Ao fazer isso, quando o usuário apertar Ctrl+C ele irá escrever ‘bye’ e irá sair, isso acontece, pois estamos chamando o rl.pause() já que estamos pausando e não pegando mais nada do stdin.
Podemos criar várias formas de interação, vou dar mais um exemplo prático.
rl.question('qual o seu nome?', (nome) => {
console.log('prazer ', nome)
})
Rodando o node, a pergunta irá aparecer e ao escrever o console.log vai ser retorndado: prazer mais o nome que você digitou.
Em Java, temos algo bem semelhante. Conseguimos dar o readline no stream e ele devolve a linha digitada pelo usuário.
Conclusão
Apenas com o realine já é possível construir uma ferramenta simples como ler dois arquivos e fazer algo apenas utilizando puramente o rl.on e o rl.question.
Confira o video:
Curta o DevPleno no Facebook, inscreva-se no canal e não se esqueça de cadastrar seu e-mail para não perder as novidades. Ah, fique à vontade para deixar suas dúvidas e sugestões nos comentários. Abraço!
Mestre em Sistemas de Informação pela USP e criador do DevPleno. Iniciou sua carreira como professor com apenas 18 anos em um curso técnico, foram 11 anos em sala de aula formando desenvolvedores fullstack no sul de Minas Gerais.