Estou começando com NodeJS e Express 4, e estou um pouco confuso. Eu estava lendo o site do Express, mas não consigo ver quando usar um manipulador de rota ou quando usar express.Router
.
Como pude ver, se eu quiser mostrar uma página ou algo quando o usuário acessar, /show
por exemplo, devo usar:
var express = require('express')
var app = express()
app.get("/show", someFunction)
No começo, pensei que isso era antigo (para o Express 3). Está certo ou este também é o caminho para o Express 4?
Se essa é a maneira de fazer isso no Express 4, para que express.Router
serve?
Eu li quase o mesmo exemplo acima, mas usando express.Router
:
var express = require('express');
var router = express.Router();
router.get("/show", someFunction)
Então, qual é a diferença entre os dois exemplos?
Qual deles devo usar se quiser apenas fazer um site de teste simples?
Router
não.listen()
solicita por si só. É útil para separar seu aplicativo em vários módulos - criando umRouter
em cada um queapp
poderequire()
e.use()
como middleware.app.get(..)
sintaxe é apenas um atalho para tornar o trabalhoexpress.router
mais conveniente. Se você está apenas começando, não se preocupe com as especificidades do roteador.app's
próprios métodos de roteamento, comoapp.get()
, são suficientes para suas necessidades, use-os. ORouter
está ali apenas por conveniência para ajudar a organizar a aplicação em vários módulos. No guia : " Aexpress.Router
classe pode ser usada para criar manipuladores de rota montáveis modulares. UmaRouter
instância é um middleware completo e um sistema de roteamento; por esse motivo, é freqüentemente chamado de "Respostas:
app.js
dogs.js
Quando
var app = express()
é chamado, um objeto de aplicativo é retornado. Pense nisso como o aplicativo principal .Quando
var router = express.Router()
é chamado, um mini aplicativo ligeiramente diferente é retornado. A idéia por trás do mini aplicativo é que cada rota no seu aplicativo possa se tornar bastante complicada, e você se beneficiaria de mover todo esse código para um arquivo separado. O roteador de cada arquivo se torna um miniaplicativo , com uma estrutura muito semelhante à do aplicativo principal .No exemplo acima, o código para a rota / dogs foi movido para seu próprio arquivo para não desorganizar o aplicativo principal . O código para / gatos e / pássaros seria estruturado de maneira semelhante em seus próprios arquivos. Ao separar esse código em três mini aplicativos , você pode trabalhar na lógica de cada um isoladamente e não se preocupar com como isso afetará os outros dois.
Se você possui um código (middleware) que pertence a todas as três rotas, é possível colocá-lo no aplicativo principal antes das
app.use(...)
chamadas. Se você tiver um código (middleware) referente a apenas uma dessas rotas, poderá colocá-lo no arquivo apenas para essa rota.fonte
app.use('/dogs', dogs)(app)
já que está definindo rotas para lá, além disso (e me corrija se estiver errado), se fizer dessa maneira, o objeto do aplicativo terá todos os itens intermediários anteriormente colocados nele e o middleware adicional será adicionado ao objeto do aplicativo (supondo que mais middleware esteja na rota de cães). se você o usarroute.get('/dogs', route)
, apenas passará o middleware para o objeto do aplicativo ao interagir com as rotas definidas nesse roteador e se o escopo do aplicativo estiver fora da rota, ele não terá acesso a esse middleware.app.use('/dogs', show)
. Dessa forma, a rota é independente do aplicativo e pode ser reutilizada em qualquer aplicativo Express. Middleware colocado em qualquer lugar antes que uma rota seja usada por essa rota. Se você colocar o middleware acima de todas as rotas no app.js, todas as rotas usarão esse middleware. Se você colocar o middleware dentro de um arquivo de rota (dogs.js), somente essa rota o usará. Se você colocar o middleware após a rota GET em dogs.js, somente a rota POST o usará (contanto que termine com uma resposta).app.get('/dogs'dogs,)(app)
já que a pergunta era sobre o recurso get do app.get e route.get. você estava mostrando como separar as rotas para torná-las gerenciáveis. Mas minha anedota não estaria correta se estamos falandoapp.get
? Se eu puder acessar um PC, editarei meu comentário acima.Router
não.listen()
solicita por si próprio". Essa pode ser a principal diferença.O Express 4.0 vem com o novo roteador. Conforme mencionado no site:
Há um bom artigo em https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 que descreve as diferenças e o que pode ser feito com os roteadores.
Resumir
Com os roteadores, você pode modular seu código mais facilmente. Você pode usar roteadores como:
Nota:
O
app.router
objeto, que foi removido no Express 4, voltou ao Express 5. Na nova versão, é apenas uma referência ao roteador Express base, ao contrário do Express 3, onde um aplicativo precisava carregá-lo explicitamente.fonte
Como no exemplo acima, podemos adicionar diferentes métodos de solicitação HTTP em uma rota.
fonte
Digamos que seu aplicativo seja pouco complexo. Então, o que fazemos primeiro é dividir o aplicativo em vários módulos para que as alterações em um módulo não atrapalhem as demais e você possa continuar trabalhando em módulos individuais, mas no final do dia você precisa integrar tudo em um desde que você estão construindo um único aplicativo. É como se tivéssemos um aplicativo principal e poucos aplicativos filhos cujo pai é o aplicativo principal. Então, quando criamos o aplicativo pai, criamos um usando
E para esse aplicativo pai, precisamos incluir os aplicativos filhos. Mas como os aplicativos filhos não são totalmente diferentes (pois são executados no mesmo termo context-java), o express fornece a maneira de fazer isso por meio da função Router do Expresse e é isso que fazemos no arquivo de cada módulo filho e vamos chamar um módulo filho como aboutme .
Por module.exports , estamos disponibilizando este módulo para consumo por outros e, como modulamos as coisas, precisamos disponibilizar os arquivos do módulo para o aplicativo pai por meio da função de exigência do nó, como qualquer outro módulo de terceiros e o arquivo pai parece algo assim.
depois de disponibilizar esse módulo filho para o pai, precisamos informar ao aplicativo pai quando usar esse aplicativo filho. Digamos que quando um usuário acessa o caminho sobre mim, precisamos do aplicativo filho sobre mim para lidar com a solicitação e fazemos isso usando o método de uso do Expresse .
e de uma só vez o arquivo pai se parece com isso
Acima de tudo, o que os pais podem fazer é iniciar um servidor onde a criança não pode. Espero que isso esclareça. Para obter mais informações, você sempre pode olhar para o código-fonte que leva algum tempo, mas fornece muitas informações. Obrigado.
fonte
parent.use('/aboutme', child)
?usar o app.js para escrever rotas significa que eles estão acessíveis a todos os usuários, pois o app.js é carregado no início do aplicativo. No entanto, colocar rotas nos miniaplicativos express.router () protege e restringe sua acessibilidade.
fonte
express.Router
tem muitas opções:/show
rota não deve ser a mesma que/Show
, esse comportamento é desativado por padrão/show/
rota para não ser igual a/show
, esse comportamento também é desativado por padrãofonte
Em uma palavra, você
express.Router
pode fazer mais coisas quando comparado aapp.get()
, como middleware, além disso, você pode definir mais um objeto roteador comexpress.Router()
fonte