Este guia de estudos abrange tópicos essenciais de Node.js, desde conceitos básicos até funcionalidades avançadas. Utilize este guia como um mapa para sua jornada de aprendizado em Node.js.
- Introdução ao Node.js
- Configuração do Ambiente
- Módulos Node.js
- Manipulação de Arquivos
- Eventos
- Streams
- Trabalhando com HTTP
- Express.js
- Banco de Dados
- Autenticação e Autorização
- Testes
- Boas Práticas
- Ferramentas e Recursos
Node.js é uma plataforma construída sobre o motor JavaScript V8 do Google Chrome, utilizada para construir aplicações de rede rápidas e escaláveis. Node.js utiliza um modelo de I/O não bloqueante e orientado a eventos, tornando-o leve e eficiente.
- Baixe e instale o Node.js a partir do site oficial.
- Verifique a instalação:
node -v
npm -v
mkdir meu-projeto
cd meu-projeto
npm init -y
npm install express
// arquivo: saudacao.js
module.exports = function(nome) {
return `Olá, ${nome}!`;
};
// arquivo: app.js
const saudacao = require('./saudacao');
console.log(saudacao('João'));
const fs = require('fs');
const path = require('path');
const fs = require('fs');
fs.readFile('arquivo.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
fs.writeFile('arquivo.txt', 'Olá, Mundo!', err => {
if (err) {
console.error(err);
return;
}
console.log('Arquivo escrito com sucesso!');
});
fs.appendFile('arquivo.txt', ' Mais texto.', err => {
if (err) {
console.error(err);
return;
}
console.log('Texto adicionado com sucesso!');
});
const EventEmitter = require('events');
class MeuEmissor extends EventEmitter {}
const meuEmissor = new MeuEmissor();
meuEmissor.on('evento', () => {
console.log('Evento disparado!');
});
meuEmissor.emit('evento');
const fs = require('fs');
const stream = fs.createReadStream('arquivo.txt', 'utf8');
stream.on('data', chunk => {
console.log(`Chunk recebido: ${chunk}`);
});
const fs = require('fs');
const stream = fs.createWriteStream('arquivo.txt');
stream.write('Olá, ');
stream.write('Mundo!');
stream.end();
const http = require('http');
const servidor = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Olá, Mundo!\n');
});
servidor.listen(3000, '127.0.0.1', () => {
console.log('Servidor rodando em http://127.0.0.1:3000/');
});
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Olá, Mundo!');
});
app.listen(3000, () => {
console.log('Servidor rodando na porta 3000');
});
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
app.get('/usuarios', (req, res) => {
res.json([{ nome: 'João' }, { nome: 'Maria' }]);
});
npm install mongoose
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/meu_banco', { useNewUrlParser: true, useUnifiedTopology: true });
const Usuario = mongoose.model('Usuario', { nome: String });
const novoUsuario = new Usuario({ nome: 'João' });
novoUsuario.save().then(() => console.log('Usuário salvo'));
npm install jsonwebtoken
const jwt = require('jsonwebtoken');
const segredo = 'meu_segredo';
const token = jwt.sign({ id: 123 }, segredo, { expiresIn: '1h' });
jwt.verify(token, segredo, (err, decoded) => {
if (err) {
console.error('Token inválido');
return;
}
console.log('Token válido:', decoded);
});
app.use((req, res, next) => {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).send('Acesso negado');
}
jwt.verify(token, segredo, (err, decoded) => {
if (err) {
return res.status(401).send('Token inválido');
}
req.user = decoded;
next();
});
});
npm install mocha chai
const chai = require('chai');
const expect = chai.expect;
describe('Teste de exemplo', () => {
it('deve retornar verdadeiro', () => {
expect(true).to.be.true;
});
});
npm install supertest
const request = require('supertest');
const express = require('express');
const app = express();
app.get('/usuarios', (req, res) => {
res.json([{ nome: 'João' }]);
});
describe('GET /usuarios', () => {
it('deve responder com JSON', (done) => {
request(app)
.get('/usuarios')
.expect('Content-Type', /json/)
.expect(200, done);
});
});
- Modularize seu código: Separe funcionalidades em módulos distintos.
- Escreva testes: Garanta que seu código funcione como esperado.
- Use ferramentas de linting: Mantenha seu código limpo e consistente.
- Gerencie variáveis de ambiente: Utilize arquivos
.env
para configurações sensíveis. - Documente seu código: Facilite a manutenção e o entendimento do código.
- Node.js: Site Oficial
- Express.js: Documentação Oficial
- MongoDB: Site Oficial
- Mongoose: Documentação Oficial
- Node.js Docs: Documentação Oficial
- NPM: Site Oficial
- MDN Web Docs: Node.js Guia
- Egghead.io: Tutoriais de Node.js
Este guia é um ponto de partida. Explore cada tópico, pratique e aprofunde seus conhecimentos para se tornar um desenvolvedor Node.js proficient. Boa sorte!