No meu express
aplicativo NodeJS , tenho app.js
algumas rotas comuns. Então em umwf.js
arquivo, eu gostaria de definir mais algumas rotas.
Como posso app.js
reconhecer outros manipuladores de rota definidos no wf.js
arquivo?
Um simples requisito não parece funcionar.
Respostas:
Se você deseja colocar as rotas em um arquivo separado , por exemplo
routes.js
, você pode criar oroutes.js
arquivo desta maneira:E então você pode exigir que ele
app.js
passe oapp
objeto desta maneira:Veja também estes exemplos
fonte
Embora essa seja uma pergunta mais antiga, eu tropecei aqui, procurando uma solução para um problema semelhante. Depois de tentar algumas das soluções aqui, acabei indo em uma direção diferente e pensei em adicionar minha solução para qualquer pessoa que acabasse aqui.
No express 4.x, você pode obter uma instância do objeto roteador e importar outro arquivo que contém mais rotas. Você pode até fazer isso recursivamente para que suas rotas importem outras, permitindo criar caminhos de URL fáceis de manter. Por exemplo, se eu já tiver um arquivo de rota separado para o terminal '/ tests' e desejar adicionar um novo conjunto de rotas para '/ tests / automatic', convém dividir essas rotas '/ automatic' em outro arquivo para mantenha meu arquivo '/ test' pequeno e fácil de gerenciar. Também permite agrupar rotas logicamente pelo caminho da URL, o que pode ser realmente conveniente.
Conteúdo de ./app.js:
Conteúdo de ./routes/tests.js
Conteúdo de ./routes/testRoutes/automated.js:
fonte
Com base no exemplo do @ShadowCloud, consegui incluir dinamicamente todas as rotas em um subdiretório.
routes / index.js
Em seguida, coloque os arquivos de rota no diretório de rotas da seguinte maneira:
routes / test1.js
Repetindo isso quantas vezes eu precisasse e finalmente no app.js colocando
fonte
E desenvolvendo ainda mais a resposta anterior, esta versão do routes / index.js ignorará todos os arquivos que não terminem em .js (e em si)
fonte
.DS_Store
arquivos e isso estava atrapalhando tudo.Roteamento recursivo completo de todos os
.js
arquivos dentro da/routes
pasta, insira issoapp.js
.em
/routes
você colocawhatevername.js
e inicializa suas rotas assim:fonte
Estou tentando atualizar esta resposta com "express": "^ 4.16.3". Esta resposta é semelhante a ShortRound1911.
server.js
/src/routes/index.js
/src/routes/siswa_route.js
Espero que isso possa ajudar alguém. Feliz codificação!
fonte
Se você estiver usando express-4.x com TypeScript e ES6, este seria o melhor modelo para usar:
src/api/login.ts
src/app.ts
Muito mais limpo do que usar
var
emodule.exports
.fonte
Um ajuste para todas essas respostas:
Basta usar um regex para filtrar testando cada arquivo na matriz. Não é recursivo, mas filtrará as pastas que não terminam em .js
fonte
Sei que essa é uma pergunta antiga, mas eu estava tentando descobrir algo parecido comigo e este é o lugar em que acabei, então queria colocar minha solução para um problema semelhante, caso outra pessoa tenha os mesmos problemas que eu ' estou tendo. Há um bom módulo de nó por aí chamado consign que faz muitas coisas do sistema de arquivos que são vistas aqui para você (ou seja, nada de readdirSync). Por exemplo:
Eu tenho um aplicativo API repousante que estou tentando criar e quero colocar todas as solicitações que vão para '/ api / *' para serem autenticadas e quero armazenar todas as minhas rotas que entram na api em seu próprio diretório (vamos chamá-lo de 'api'). Na parte principal do aplicativo:
Dentro do diretório de rotas, eu tenho um diretório chamado "api" e um arquivo chamado api.js. No api.js, eu simplesmente tenho:
Tudo funcionou como esperado. Espero que isso ajude alguém.
fonte
Se você deseja que um arquivo .js separado organize melhor suas rotas, basta criar uma variável no
app.js
arquivo apontando para sua localização no sistema de arquivos:então,
Onde
.foo
está alguma função declarada no seuwf.js
arquivo. por exemplofonte
wf.foo
etc., uma vez que estão fora do escopo, como nas outras soluções apresentadas? Estou me referindo ao caso em que você normalmente acessaria variáveis / funções compartilhadas no wf.foo se não fosse separado do app.js.Eu escrevi um pequeno plugin para fazer isso! ficou cansado de escrever o mesmo código repetidamente.
https://www.npmjs.com/package/js-file-req
Espero que ajude.
fonte
Esta é possivelmente a (s) pergunta (s) mais impressionante (s) de estouro de pilha de todos os tempos. Eu amo as soluções de Sam / Brad acima. Pensei que iria concordar com a versão assíncrona que implementei:
Minha estrutura de diretórios é um pouco diferente. Normalmente, defino rotas no app.js (no diretório raiz do projeto) por
require
-ing'./routes'
. Conseqüentemente, estou pulando o chequeindex.js
porque quero incluí-lo também.EDIT: Você também pode colocar isso em uma função e chamá-lo recursivamente (editei o exemplo para mostrar isso) se quiser aninhar suas rotas em pastas de profundidade arbitrária.
fonte
você pode colocar todas as funções de rota em outros arquivos (módulos) e vinculá-lo ao arquivo principal do servidor. no arquivo expresso principal, adicione uma função que vinculará o módulo ao servidor:
e chame essa função para cada modelo de rota:
nos arquivos do módulo (por exemplo - arquivo login.js), defina as funções normalmente:
e exporte-o com o método de solicitação como uma chave e o valor é uma matriz de objetos, cada um com teclas de caminho e função.
fonte