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.
