Cursos / Informática para Internet / Desenvolvimento Backend / Aula

arrow_back Aula 05 - Roteamento, Middleware e Validação

Manipulando rotas com Express


Nesta aula, você verá como controlar rotas, como validar dados e também conhecere o conceito de middlewares do Express.

Router

O Express fornece um facilitador para organizar as rotas em diferentes arquivos, deixando o código mais organizado. Para usar esse conceito, crie um arquivo novo chamado usuarios.rota.js na pasta /rotas do seu projeto com o seguinte conteúdo:

const express = require('express')
const router = express.Router()
const { v4: uuidv4 } = require('uuid')

const usuarios = {}

router.get('/:id', (req, res) => {
    res.json({usuarios: usuarios[req.params.id]})
})

router.put('/', (req, res) => {
    const id = req.query.id
    if (id && usuarios[id]){
        const usuario = req.body
        usuario.id = id
        usuarios[id] = usuario
        res.json({msg: "Usuário atualizado com sucesso!"})
    }else{
        res.status(400).json({msg: "Usuário não encontrado!"})
    }
})

router.delete('/', (req, res) => {
    const id = req.query.id
    if (id && usuarios[id]){
        delete usuarios[id]
        res.json({msg: "Usuário deletado com sucesso!"})
    }else{
        res.status(400).json({msg: "Usuário não encontrado!"})
    }
})

router.post('/', (req, res) => {
    const usuario = req.body
    const idUsuario = uuidv4()
    usuario.id = idUsuario
    usuarios[idUsuario] = usuario
    res.json({msg: "Usuário adicionado com sucesso!"})
})

router.get('/', (req, res) => {
    res.json({usuarios: Object.values(usuarios)})
})

module.exports = router

Perceba que em vez de criar as rotas diretamente na instância da aplicação (app), estamos criando no express.Router(). Com isso, é possível dividir e organizar melhor o código.

Uma vez criado o arquivo de rotas, altere o arquivo principal da aplicação (index.js) para incluir o arquivo de rotas e indicar o path base.

const express = require('express')
const rotaUsuario = require('./rotas/usuario.rota')

const app = express()
app.use(express.json())

app.use('/usuarios', rotaUsuario)

app.get('/', (req, res) => {
    res.json({msg: "Hello from Express!"})
})

app.listen(8080, () => {
    console.log('Servidor pronto na porta 8080')
})

Seguindo no nosso exemplo, vamos criar a API de um blog. Para isso, vamos agora criar as operações relativas às postagens do blog replicando a solução dadas as rotas do /usuarios.

Crie então o arquivo post.rota.js na pasta /rotas com o seguinte conteúdo:

const express = require('express')
const router = express.Router()
const { v4: uuidv4 } = require('uuid')

const posts = {}

router.get('/:id', (req, res) => {
    res.json({posts: posts[req.params.id]})
})

router.put('/', (req, res) => {
    const id = req.query.id
    if (id && posts[id]){
        const post = req.body
        post.id = id
        posts[id] = post
        res.json({msg: "Post atualizado com sucesso!"})
    }else{
        res.status(400).json({msg: "Post não encontrado!"})
    }
})

router.delete('/', (req, res) => {
    const id = req.query.id
    if (id && posts[id]){
        delete posts[id]
        res.json({msg: "Post deletado com sucesso!"})
    }else{
        res.status(400).json({msg: "Post não encontrado!"})
    }
})

router.post('/', (req, res) => {
    const post = req.body
    const idPost = uuidv4()
    post.id = idPost
    posts[idPost] = post
    res.json({msg: "Post adicionado com sucesso!"})
})

router.get('/', (req, res) => {
    res.json({posts: Object.values(posts)})
})

module.exports = router

Altere agora o arquivo principal (index.js) para incluir a nova rota:

const express = require('express')
const rotaUsuario = require('./rotas/usuario.rota')
const rotaPost = require('./rotas/posts.rota')

const app = express()
app.use(express.json())

app.use('/usuarios', rotaUsuario)
app.use('/posts', rotaPost)

app.get('/', (req, res) => {
    res.json({msg: "Hello from Express!"})
})

app.listen(8080, () => {
    console.log('Servidor pronto na porta 8080')
})

Para a explicação detalhada, não deixe de assistir a videoaula.


Versão 5.3 - Todos os Direitos reservados