Skip to content

Latest commit

 

History

History
386 lines (274 loc) · 7.24 KB

NodeJS.md

File metadata and controls

386 lines (274 loc) · 7.24 KB

Guia de Estudos Node.js

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.


Índice

  1. Introdução ao Node.js
  2. Configuração do Ambiente
  3. Módulos Node.js
  4. Manipulação de Arquivos
  5. Eventos
  6. Streams
  7. Trabalhando com HTTP
  8. Express.js
  9. Banco de Dados
  10. Autenticação e Autorização
  11. Testes
  12. Boas Práticas
  13. Ferramentas e Recursos

Introdução ao Node.js

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.


Configuração do Ambiente

Instalação do Node.js

  1. Baixe e instale o Node.js a partir do site oficial.
  2. Verifique a instalação:
node -v
npm -v

Iniciando um Projeto Node.js

mkdir meu-projeto
cd meu-projeto
npm init -y

Instalando Dependências

npm install express

Módulos Node.js

Importando e Exportando Módulos

Exportação

// arquivo: saudacao.js
module.exports = function(nome) {
  return `Olá, ${nome}!`;
};

Importação

// arquivo: app.js
const saudacao = require('./saudacao');
console.log(saudacao('João'));

Módulos Nativos

const fs = require('fs');
const path = require('path');

Manipulação de Arquivos

Lendo Arquivos

const fs = require('fs');

fs.readFile('arquivo.txt', 'utf8', (err, data) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(data);
});

Escrevendo Arquivos

fs.writeFile('arquivo.txt', 'Olá, Mundo!', err => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Arquivo escrito com sucesso!');
});

Apêndice em Arquivos

fs.appendFile('arquivo.txt', ' Mais texto.', err => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Texto adicionado com sucesso!');
});

Eventos

Emissor de Eventos

const EventEmitter = require('events');
class MeuEmissor extends EventEmitter {}

const meuEmissor = new MeuEmissor();
meuEmissor.on('evento', () => {
  console.log('Evento disparado!');
});

meuEmissor.emit('evento');

Streams

Leitura de Streams

const fs = require('fs');
const stream = fs.createReadStream('arquivo.txt', 'utf8');

stream.on('data', chunk => {
  console.log(`Chunk recebido: ${chunk}`);
});

Escrita em Streams

const fs = require('fs');
const stream = fs.createWriteStream('arquivo.txt');

stream.write('Olá, ');
stream.write('Mundo!');
stream.end();

Trabalhando com HTTP

Servidor HTTP Básico

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/');
});

Express.js

Configuração Básica

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');
});

Middleware

app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
});

Rotas

app.get('/usuarios', (req, res) => {
  res.json([{ nome: 'João' }, { nome: 'Maria' }]);
});

Banco de Dados

MongoDB com Mongoose

Instalação

npm install mongoose

Conexão e Modelos

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'));

Autenticação e Autorização

JSON Web Tokens (JWT)

Instalação

npm install jsonwebtoken

Geração e Verificação de Token

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);
});

Middleware de Autenticação

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();
  });
});

Testes

Mocha e Chai

Instalação

npm install mocha chai

Exemplo de Teste

const chai = require('chai');
const expect = chai.expect;

describe('Teste de exemplo', () => {
  it('deve retornar verdadeiro', () => {
    expect(true).to.be.true;
  });
});

Supertest para Testes de API

Instalação

npm install supertest

Exemplo de Teste de API

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);
  });
});

Boas Práticas

  • 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.

Ferramentas e Recursos

Ferramentas

Recursos


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!