Opa,
Como faço para inserir uma função dentro do Middleware que se funcionar prossegue com a execução do Expresse se não ele para a execução e solta erro.
Opa,
Como faço para inserir uma função dentro do Middleware que se funcionar prossegue com a execução do Expresse se não ele para a execução e solta erro.
Olá André,
Ficou um pouco confuso o que você quis dizer, da maneira como você descreveu, me parece que você está querendo de fato criar um middleware
, correto?
Por exemplo, vamos supor que temos um parâmetro obrigatório em nossa requisição
chamado estoque
, e não queremos que o express prossiga nenhuma requisição sem que haja esse dado, no caso poderíamos fazer:
const express = require('express');
const bodyParser = require('body-parser');
const server = express();
server.use(bodyParser.json())
server.use( (req, res, next) => {
const { estoque } = req.body;
if(!estoque || estoque < 500)
return res.status(400).json({error: "Estoque não encontrado"})
next();
})
server.get("/hello", (req, res) => {
return res.send({...req.body, hello: "world"})
})
server.listen(3000, () => console.log("server listen 3000"));
No caso, antes de começar as rotas da nossa aplicação, podemos utilizar o use
para adicionar a nossa middleware
de validação, se houver algum problema com a requisição podemos lançar um erro e interromper, caso contrário seguímos a execução com o parâmetro extra next
Agora, caso não seja isso que você quis dizer, poderia dar um exemplo do que de fato você pretende fazer?
Abraços e Bons Estudos!
Olá,
Isso mesmo que estou querendo.
O que quero fazer é uma função que atualiza o banco de dados.
Se essa função ocorrer bem o expresse executa se não ele dá erro e para.
Atenciosamente,
André Oliveira
Olá,
Isso mesmo que estou querendo.
O que quero fazer é uma função que atualiza o banco de dados.
Se essa função ocorrer bem o expresse executa se não ele dá erro e para.
Atenciosamente,
André Oliveira
Olá,
Uma dúvida, o use é exercitado nessa ordem que é implementada, ou seja, nesse caso do sei código vai executar primeiro o paprse depois o estoque,.se eu trocar a ordem ele troca a execução? Ou essa execução é assincrona?
Atenciosamente,
André Oliveira
Olá Andre, tudo bem?
Peço perdão pela demora, estava participando da finalização da Imersão React da Alura :)
se eu trocar a ordem ele troca a execução? Ou essa execução é assincrona?
Ele troca a ordem e execução!
Podemos pensar os middlewares
como correntes, então no código que eu mostrei cada use
é como se fosse um nó da corrente, no caso:
Requisição ----- [ Body Parser ] ----- [ Estoque ] ----- [Rotas da Aplicação] ---- [ Outras....]
Se você trocar a ordem, será executado primeiro o Estoque
e ai teremos um erro pois não fizemos o parse
da requisição, então os dados ainda não estão como um objeto javascript
e o nosso código não funcionaria :)
Se essa função ocorrer bem o expresse executa se não ele dá erro e para.
Bem, o que cabe pensar é se queremos executar essa função para todas as requisições, caso a resposta seja sim, então você pode tranquilamente fazer:
app.use( (req, res, next) => {
... lógica da função do banco de dados
return res.status().json() ....
next()
}
Onde utilizará o return
para interromper o fluxo da requisição, e o next
para chamar o próximo nó
da corrente, tendo algo parecido como:
Requisição ----- [Body Parser] ----[ Middleware Banco de Dados] ----- [ Rotas da Aplicação]
Abraços e Bons Estudos!