Sou um pouco novo para expressar e node.js, e não consigo descobrir a diferença entre app.use e app.get. Parece que você pode usar os dois para enviar informações. Por exemplo:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
parece ser o mesmo que isto:
app.get('/', function (req,res) {
res.send('Hello');
});
Respostas:
app.use()
destina-se a vincular o middleware ao seu aplicativo. Opath
é um caminho " mount " ou " prefix " e limita o middleware a aplicar-se apenas a todos os caminhos solicitados que começam com ele. Pode até ser usado para incorporar outro aplicativo:Ao especificar
/
como um caminho " mount ",app.use()
responderá a qualquer caminho que comece com/
, todos eles e independentemente do verbo HTTP usado:GET /
PUT /foo
POST /foo/bar
app.get()
, por outro lado, faz parte do roteamento de aplicativo do Express e destina-se a corresponder e manipular uma rota específica quando solicitado com oGET
verbo HTTP:GET /
E, o roteamento equivalente para o seu exemplo
app.use()
seria:( Atualização: Tentativa de demonstrar melhor as diferenças. )
Os métodos de roteamento, inclusive
app.get()
, são métodos de conveniência que ajudam a alinhar as respostas às solicitações com mais precisão. Eles também adicionam suporte a recursos como parâmetros enext('route')
.Em cada uma delas
app.get()
há uma chamada paraapp.use()
, assim você certamente pode fazer tudo issoapp.use()
diretamente. Mas, para isso, muitas vezes será necessário (provavelmente desnecessariamente) reimplementar várias quantidades de código padrão.Exemplos:
Para rotas estáticas simples:
vs.
Com vários manipuladores para a mesma rota:
vs.
Com parâmetros:
vs.
fonte
path-to-regexp
mais nada e pode usar parâmetros de rota diretamente no primeiro argumento douse
método.app.use
é o método de "nível inferior" do Connect, a estrutura de middleware da qual o Express depende.Aqui está minha orientação:
app.get
se você deseja expor um método GET.app.use
se você deseja adicionar algum middleware (um manipulador para a solicitação HTTP antes que ela chegue às rotas que você configurou no Express) ou se você deseja modular suas rotas (por exemplo, expor um conjunto de rotas) de um módulo npm que outros aplicativos da web possam usar).fonte
app.use
para lidar com algumas rotas? Ou nunca devemos usarapp.use
para roteamento.Simplesmente app.use significa "Executar isso em TODAS as solicitações"
app.get significa "Executar isso em uma solicitação GET, para o URL especificado"
fonte
app.get
é chamado quando o método HTTP é definido comoGET
, enquantoapp.use
é chamado independentemente do método HTTP e, portanto, define uma camada que está no topo de todos os outros tipos RESTful aos quais os pacotes expressos dão acesso.fonte
Diferença entre
app.use
&app.get
:app.use
→ Geralmente é usado para introduzir middlewares em sua aplicação e pode lidar com todos os tipos de solicitações HTTP.app.get
→ É apenas para lidar com solicitações GET HTTP.Agora, há uma confusão entre
app.use
&app.all
. Sem dúvida, há uma coisa comum neles, que ambos podem lidar com todos os tipos de solicitações HTTP. Mas existem algumas diferenças que nos recomendam usar app.use para middlewares e app.all para manipulação de rotas.app.use()
→ Leva apenas um retorno de chamada.app.all()
→ Pode receber vários retornos de chamada.app.use()
verá apenas se o URL inicia com o caminho especificado.Mas,
app.all()
corresponderá ao caminho completo.Por exemplo,
next()
chamar dentro doapp.use()
vão chamar o próximo middleware ou qualquer manipulador de rota, masnext()
chamada dentroapp.all()
vai chamar o manipulador de rota seguinte (app.all()
,app.get/post/put...
etc.) somente. Se houver algum middleware depois, ele será ignorado. Portanto, é aconselhável colocar todos os middlewares sempre acima dos manipuladores de rota.fonte
next()
dentro deapp.all('/*', ...)
, de fato, executará uma versãoapp.use('/', ...)
posterior no arquivo. Talvez eu tenha te entendido mal lá. Explicação muito útil caso contrário.Além das explicações acima, o que eu experimento:
corresponderá a todos os pedidos que começam com '/ book' como URL. portanto, também corresponde a '/ book / 1' ou '/ book / 2'
corresponde apenas à solicitação GET com a correspondência exata . Ele não manipula URLs como '/ book / 1' ou '/ book / 2'
Portanto, se você deseja um manipulador global que lide com todas as suas rotas, essa
app.use('/')
é a opção.app.get('/')
manipulará apenas o URL raiz.fonte