Entrada/Saída de dados
Entrada de dados
Módulo readline
Node.js oferece o módulo nativo readline para ler entradas de dados do utilizador via terminal (stdin).
Exemplo básico:
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.question('Qual é o seu nome? ', (nome) => {
  console.log(`Olá, ${nome}!`);
  rl.close();
});
Neste código:
- Criamos uma interface para o terminal (rl).
- A função rl.questionexibe a pergunta e espera a resposta do utilizador.
- Quando o utilizador responde e pressiona Enter, a resposta é recebida no callback (nome) => {...}.
- A mensagem de saudação é exibida.
- rl.close()fecha a interface para encerrar a leitura.
Tratamento de Erros e Conversão de Dados
Para capturar números e validar o input:
const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
rl.question('Digite um número: ', (input) => {
  const numero = parseInt(input);
  if (isNaN(numero)) {
    console.log('Por favor, digite um número válido.');
  } else {
    console.log(`Você digitou o número: ${numero}`);
  }
  rl.close();
});
Módulo prompt
O módulo “prompt” em Node.js é uma ferramenta para interagir com o utilizador via linha de comando, facilitando a entrada de dados durante a execução de programas.
1. Instalação do módulo prompt
Para usar o módulo, primeiro instale-o via npm:
npm install prompt
2. Importação e início do prompt
No seu arquivo JavaScript, importe o módulo e inicie o prompt:
var prompt = require('prompt');
prompt.start();
3. Solicitando entradas simples
Você pode pedir ao utilizador para digitar valores para propriedades específicas. Por exemplo, para pedir “username” e “email”:
prompt.get(['username', 'email'], function (err, result) {
  if (err) { return onError(err); }
  console.log('Utilizador: ' + result.username);
  console.log('Email: ' + result.email);
});
function onError(err) {
  console.error(err);
}
Ao executar este script, o console solicitará que o utilizador digite o seu username e email, e depois exibirá os valores.
4. Utilizando Promises (async/await)
O método prompt.get() retorna uma Promise se você não passar callback, permitindo o uso com async/await:
(async () => {
  prompt.start();
  try {
    const { username, email } = await prompt.get(['username', 'email']);
    console.log('Usuário:', username);
    console.log('Email:', email);
  } catch (err) {
    console.error(err);
  }
})();
5. Personalização da mensagem do prompt
Pode-se customizar a mensagem e o delimitador que aparecem para o utilizador:
prompt.message = "Digite aqui";
prompt.delimiter = " >> ";
prompt.start();
prompt.get(['nome'], function(err, result) {
  console.log('Nome:', result.nome);
});
Nesse exemplo, o prompt mostrará algo como:
Digite aqui >> nome:
6. Definição de esquema com validação
Você pode definir propriedades com descrição, tipo, padrão e validação:
var schema = {
  properties: {
    idade: {
      description: 'Qual a sua idade?',
      type: 'number',
      required: true,
      message: 'Idade deve ser um número'
    }
  }
};
prompt.start();
prompt.get(schema, function(err, result) {
  if (err) return onError(err);
  console.log('Idade:', result.idade);
});
O prompt automaticamente validará que a entrada é um número e exigirá um valor.
7. Parar o prompt
Para encerrar o stream de entrada do prompt, você pode usar:
prompt.stop();
Desta forma libertarmos o stdin após uso.
Módulo prompt-sync
O prompt-sync é um módulo do Node.js que possibilita solicitar entradas do utilizador no terminal de forma síncrona, ou seja, o programa espera o utilizador digitar algo antes de continuar a execução. É uma alternativa simples e direta ao uso de módulos baseados em callbacks ou eventos.
1. Instalação
No terminal, navegue até à pasta do seu projeto e execute:
npm install prompt-sync
2. Uso básico
No ficheiro JavaScript importe e execute o módulo para criar a função prompt:
const prompt = require('prompt-sync')();
Depois, use prompt() para exibir uma mensagem e capturar a entrada do utilizador:
const nome = prompt('Qual é o seu nome? ');
console.log(`Olá, ${nome}!`);
Exemplo completo:
const prompt = require('prompt-sync')();
const nome = prompt('Qual é o seu nome? ');
console.log(`Olá, ${nome}!`);
3. Tratando entradas numéricas
A entrada do utilizador é sempre uma string. Para usar números, converta os valores explicitamente:
const idadeStr = prompt('Digite sua idade: ');
const idade = Number(idadeStr);
if (isNaN(idade)) {
  console.log('Por favor, digite um número válido!');
} else {
  console.log(`Sua idade em 5 anos será: ${idade + 5}`);
}
4. Exemplo prático: calculadora simples
const prompt = require('prompt-sync')();
const num1 = Number(prompt('Digite o primeiro número: '));
const num2 = Number(prompt('Digite o segundo número: '));
const operador = prompt('Escolha a operação (+, -, *, /): ');
let resultado;
switch (operador) {
  case '+':
    resultado = num1 + num2;
    break;
  case '-':
    resultado = num1 - num2;
    break;
  case '*':
    resultado = num1 * num2;
    break;
  case '/':
    resultado = num2 !== 0 ? num1 / num2 : 'Erro: divisão por zero';
    break;
  default:
    resultado = 'Operação inválida';
}
console.log(`Resultado: ${resultado}`);
Resumo das características principais:
| Pacote | Tipo | Sincronia | Funcionalidade | 
|---|---|---|---|
| readline | Nativo Node.js | Assíncrono | Entrada básica via linha de comando | 
| prompt | npm (externo) | Assíncrono | Entrada simples com prompts | 
| prompt-sync | npm (externo) | Síncrono | Entrada simples e síncrona | 
Saída de dados
Para imprimir mensagens ou resultados na consola, utiliza-se a função console.log().
Exemplo simples:
console.log("Olá, Mundo!");
var nome = "Pedro";
console.log(`Olá, ${nome}!`);
Ao executar com node ficheiro.js, esta mensagem aparecerá no terminal.
