Roteiro Modular
Imagine este cenário: Tem uma loja que vende animais de estimação, e um cliente quer comprar-lhe coelhos e gatos.
Se utilizar os métodos básicos de encaminhamento definidos acima, o código terá o seguinte aspecto:
Notificação de que escrevemos as mesmas rotas várias vezes.
No entanto, escrever as rotas repetidamente aumenta a redundância e os erros de digitação. Além disso, é útil tornar o nosso código mais modular, pois é uma boa prática.
Como programador, quer sempre fazer o seu código parecer mais limpo. Para facilitar a leitura do código acima, podemos usar dois métodos.
Usar app.route
É aqui que app.route
entra. Escreverá o caminho uma vez, e poderá encadear vários manipuladores de rotas.
Pode implementar app.route
da seguinte forma:
app.route(PATH)
.get(callback)
.post(callback)
//can add more HTTP requests (.put, .delete, etc)
Podemos agora reescrever o código :
O código parece mais limpo, e teve de introduzir a rota para cada pedido HTTP apenas uma vez.
Contudo, há mais uma advertência: o parâmetro username
existe em todas as rotas. A digitação username
uma e outra vez ainda encoraja a digitação e redundâncias. E se pudéssemos torná-lo ainda mais modular?
express.Router()
Podemos usar express.Router()
para criar manipuladores de rotas modulares e montáveis. A Router
instance é um sistema completo de middleware e encaminhamento, razão pela qual é frequentemente referido como um “mini-app.”
Só precisamos de especificar o ponto de partida, e a Router
instance tratará do resto para nós.
Para usar app.Router()
, temos de criar um módulo separado, instanciar uma instância de app.Router
, e depois usar module.exports
para exportar a instância.
Para mais detalhes sobre a utilização de module.exports
, ver o meu artigo anterior.
Neste exemplo, trataremos apenas de um caminho simples que conteria os parâmetros username
e id
.
In routerExample.js
:
Usamos router.route()
, que é semelhante a app.route
. O módulo definido diz: “Desde que o caminho termine com /:username/:id
, executar o seguinte código conforme definido.”
Para o utilizar, utilizar outro módulo, main.js
:
Como dizem os comentários, usamos app.use
para dizer routeExample.js
para executar as funções que têm rotas a partir do primeiro parâmetro. O primeiro parâmetro pode ser denominado como um ponto de partida. Portanto, o caminho será starting point + PATH defined by router
.
Por exemplo, de acordo com a linha 6, vamos agora tratar de pedidos de GET e POST que começam com ‘/cats’
. Eles terão o caminho cats/:username/:id
.
p>Tal como sempre, é possível utilizar caminhos diferentes no módulo routeExample
, mas a única coisa que precisa de especificar é o ponto de partida em app.use
.
Para executar o código, digite node main
numa janela terminal e utilize cURL
noutra janela em conformidade.
Diferentes rotas em express.Router com middleware
Neste exemplo, iremos navegar para a página inicial da nossa loja de animais de estimação e definir uma função middleware, timeLog
, que irá emitir o tempo em que o respectivo caminho foi solicitado.
birds.js
:
In main.js
:
var birds = require('./birds')
app.use('/birds', birds) //handle /birds and /birds/about
Utiliza o comando node
para executar o código, depois utiliza cURL
assim: