Existe uma diferença útil entre app.all('*', ... )
e app.use('/', ...)
no Node.JS Express?
121
Na maioria dos casos, eles funcionariam de forma equivalente. A maior diferença é a ordem em que o middleware seria aplicado:
app.all()
anexa ao roteador do aplicativo, portanto, é usado sempre que o middleware app.router é alcançado (que lida com todas as rotas de método ... GET, POST, etc).AVISO: app.router foi descontinuado no express 4.x
app.use()
anexa à pilha principal de middleware do aplicativo, portanto, é usado na ordem especificada pelo middleware. por exemplo, se você colocá-lo primeiro, será a primeira coisa a ser executada. Se você colocá-lo por último, (após o roteador), ele geralmente não será executado.Normalmente, se você deseja fazer algo globalmente em todas as rotas, app.use () é a melhor opção. Além disso, tem menos chance de bugs futuros, já que o express 0.4 provavelmente deixará o roteador implícito cair (ou seja, a posição do roteador no middleware será mais importante do que é agora, já que você tecnicamente nem precisa usá-lo agora mesmo).
next("route")
comapp.all
, mas não comapp.use
.app.use leva apenas uma função de retorno de chamada e é destinado a Middleware. O middleware geralmente não lida com solicitações e respostas (tecnicamente podem), eles apenas processam os dados de entrada e os entregam ao próximo manipulador na fila.
app.all recebe vários retornos de chamada e se destina ao roteamento. com vários retornos de chamada, você pode filtrar solicitações e enviar respostas. É explicado em Filtros em express.js
app.use vê apenas se o url começa com o caminho especificado
app.all corresponderá ao caminho completo
fonte
app.use:
app.all:
Veja este exemplo de código expressJs:
Aqui está o registro ao acessar a rota '/ hello':
fonte
Com
app.use()
, o caminho de "montagem" é removido e não é visível para a função de middleware:As funções de middleware montadas (
express.static
) não são chamadas a menos quereq.url
contenha esse prefixo (/static
), ponto no qual ele é removido quando a função é chamada.Com
app.all()
, não existe esse comportamento.fonte
Sim,
app.all()
é chamado quando um determinado URI é solicitado com qualquer tipo de método de solicitação (POST, GET, PUT ou DELETE)Por outro lado
app.use()
é usado para qualquer middleware que você possa ter e é montado em um prefixo de caminho e será chamado sempre que um URI nessa rota for solicitado.Aqui está a documentação para app.all e app.use .
fonte
Duas diferenças todas as respostas acima não se aplicam.
O primeiro:
app.all
aceita um regex como seu parâmetro de caminho.app.use
NÃO aceita um regex.O segundo:
app.all(path,handler)
ouapp[method](path,handler)
, o manipuladorpath
deve ser o mesmo para todospath
. Isto é, o caminho do aplicativo [método] está completo.app.use(path,hanlder)
, se o caminho do uso estiver completo, o caminho do hanlder deve ser '/'. se o caminho do uso for o início do caminho completo, o caminho do manipulador deve ser o resto do caminho completo.fonte
Existem duas diferenças principais:
1. correspondência de padrões (resposta dada por Palani)
2.
next(route)
não funcionará dentro do corpo da função do middleware carregado usandoapp.use
. Isso é afirmado no link dos documentos:Link: http://expressjs.com/en/guide/using-middleware.html
O efeito de funcionamento de
next('route')
pode ser visto no seguinte exemplo:fonte