Tutorial de Node.js com exemplos para executar
Um tutorial gratuito de Node.js com exemplos que rodam na página: arquivos, módulos, o event loop, servidores Express para os quais você envia requisições, MongoDB e JWT. Edite o código e rode de novo.
Começar o cursoPrimeiros passos
- O que é Node.jsNode.js é um runtime que executa JavaScript fora do navegador, em servidores e no terminal. Não é uma linguagem nem um framework: é o V8 mais um event loop mais APIs para arquivos, rede e processos.
- Node.js vs JavaScriptJavaScript é a linguagem; Node.js é um programa que a executa fora do navegador. A sintaxe é idêntica, mas os globais e as APIs nativas em volta do seu código são diferentes.
- process.argvprocess.argv é um array com a linha de comando que iniciou seu programa: o executável node, o caminho do script e depois cada argumento digitado. Use process.argv.slice(2) para pegar só os seus argumentos.
- process.envprocess.env é um objeto com as variáveis de ambiente com que seu programa Node.js foi iniciado. Todo valor é string ou undefined, então converta números e booleanos você mesmo e dê um valor padrão a cada variável.
- Ler entrada do usuárioO Node.js não tem função prompt(). Para fazer uma pergunta ao usuário no terminal, crie uma interface readline em process.stdin e chame question(), ou use await com readline/promises.
Arquivos e caminhos
- fs.readFileLeia um arquivo no Node.js com fs.readFile (callback), fs.readFileSync ou await readFile de fs/promises. Passe 'utf8' para receber uma string e trate ENOENT quando o arquivo não existir.
- fs.writeFileEscreva um arquivo no Node.js com fs.writeFile, fs.writeFileSync ou await writeFile de fs/promises. O arquivo é criado se não existir e substituído se existir; use appendFile para adicionar no final.
- fs/promisesfs/promises é a versão com promises do módulo fs do Node: readFile, writeFile, readdir, stat, mkdir, rm e rename retornam promises em que você dá await, e os erros são tratados com try/catch.
- Módulo pathO módulo path monta e desmonta caminhos de arquivo do jeito certo para o sistema operacional. path.join junta segmentos; path.resolve transforma esses segmentos em um caminho absoluto, a partir da pasta atual.
Node assíncrono
- Event LoopO event loop do Node.js executa seus callbacks em fases (timers, poll, check, close), e entre um callback e outro esvazia a fila do process.nextTick e depois a fila de promises. Rode os exemplos para ver a ordem exata.
- EventEmitterO EventEmitter do módulo events do Node permite que um objeto anuncie eventos com nome usando emit e que outro código reaja com on ou once. Os listeners rodam de forma síncrona, na ordem em que foram adicionados.
HTTP e Express
- Servidor HTTP`http.createServer()` recebe uma função que roda a cada requisição com `req` e `res`. Você lê o método e a URL de `req`, define status, headers e body em `res` e chama `res.end()`.
- Rotas no ExpressUma rota no Express é um método, um caminho e um handler: `app.get('/users/:id', handler)`. Agrupe rotas relacionadas em um `express.Router()` e monte com um prefixo usando `app.use('/api', router)`.
- Middleware no ExpressUm middleware do Express é uma função `(req, res, next)` que roda antes do seu route handler. Ele pode ler ou alterar a requisição, encerrá-la com uma resposta ou chamar `next()` para passá-la adiante.
- req.params, query, body`req.params` guarda as partes nomeadas do caminho (`/users/:id`), `req.query` a query string (`?sort=new`) e `req.body` o body da requisição já interpretado, que é `undefined` até você adicionar um body parser como `express.json()`.
- Tratamento de errosUm error handler do Express é um middleware com quatro argumentos, `(err, req, res, next)`, registrado depois das suas rotas. O Express 5 envia para ele erros lançados, chamadas de `next(err)` e promises rejeitadas de handlers async.
- express.static`app.use(express.static(path.join(__dirname, 'public')))` serve todos os arquivos da pasta `public` na URL correspondente: `public/style.css` responde `/style.css`. Adicione um caminho de montagem para servi-los com um prefixo.
- CORS no ExpressUm erro de CORS significa que o navegador impediu uma página de ler a resposta da sua API porque a resposta não permitia a origem da página. Resolva no servidor enviando `Access-Control-Allow-Origin` e respondendo as requisições de preflight `OPTIONS`, na mão ou com o pacote `cors`.
Dados e autenticação
- MongoDBUse o MongoDB no Node.js com o driver oficial mongodb: conecte com MongoClient e depois insira, busque, atualize e apague documentos de uma collection, tudo com async/await.
- JWTUm JWT é um token assinado de três partes em base64url que o servidor emite no login e confere a cada requisição. No Node.js você assina e verifica um com o pacote jose ou jsonwebtoken e uma chave secreta.