Existe uma maneira de fazer isso em uma única chamada de função?
var todo = function (req, res){};
app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);
Algo como:
app.get("/", "/blabla", "/blablablabla", todo );
Eu sei que isso é uma confusão de sintaxe, mas apenas para dar uma ideia do que eu gostaria de alcançar, uma série de rotas seria incrível!
Alguém sabe como fazer isto?
Respostas:
Eu me deparei com essa pergunta enquanto procurava a mesma funcionalidade.
@Jonathan Ong mencionou em um comentário acima que o uso de arrays para caminhos está obsoleto, mas está explicitamente descrito no Express 4 e funciona no Express 3.x. Aqui está um exemplo de algo para tentar:
De dentro do
request
objeto, com um caminho de/hooplul/poo?bandle=froo&bandle=pee&bof=blarg
:Observe o que acontece com os parâmetros: ele está ciente dos grupos de captura e dos parâmetros em todos os caminhos possíveis, sejam eles usados ou não na solicitação atual.
Portanto, empilhar vários caminhos por meio de um array pode ser feito facilmente, mas os efeitos colaterais são possivelmente imprevisíveis se você espera obter algo útil do caminho que foi usado por meio de parâmetros ou grupos de captura. É provavelmente mais útil para redundância / aliasing, caso em que funcionará muito bem.
Edit: Consulte também a resposta de @ c24w abaixo .
Edit 2: Esta é uma resposta moderadamente popular. Lembre-se de que o ExpressJS, como a maioria das bibliotecas Node.js, é um banquete móvel. Embora o roteamento acima ainda funcione (estou usando-o no momento, um recurso muito útil), não posso garantir a saída do objeto de solicitação (certamente é diferente do que descrevi). Teste cuidadosamente para garantir que obtém os resultados desejados.
fonte
:var
define oreq.param
que você não usa. é usado apenas neste caso para definir o regex.(bla|blabla)
define a regex para corresponder, de forma que corresponda às stringsbla
eblablah
.?
torna toda a regex opcional, portanto, também corresponde/
.fonte
/bla(bla)?
também funciona, mas qualquer parâmetro posterior não é preenchido corretamente (ou seja,/bla(bla)?/:value
não é preenchidoreq.params.value
). Alguém sabe por quê?req.params.var
mas precisa ter certeza de quereq
passou para a funçãoVocê pode realmente passar por uma série de caminhos , assim como mencionou, e funciona muito bem:
fonte
Apenas para elaborar a resposta de Kevin , esta é a documentação do 4.x :
Eles têm alguns exemplos , incluindo:
fonte
Eu fui por um:
fonte
solicite o arquivo de sua rota original e defina a nova rota assim
fonte