2013-03-24 3 views
138

Я вроде как новый для выражения и node.js, и я не могу понять разницу между app.use и app.get. Кажется, вы можете использовать оба из них для отправки информации. Например:Разница между app.use и app.get в express.js

app.use('/',function(req, res,next) { 
    res.send('Hello'); 
    next(); 
}); 

, как представляется, так же, как это:

app.get('/', function (req,res) { 
    res.send('Hello'); 
}); 
+1

выглядит, как вы получили три разных ответа, все внося что-то в тему :) Вот связанный с этим вопрос http://stackoverflow.com/questions/11321635/node-js-express-what-is-app-use –

+0

да, все хорошие ответы. Спасибо, я посмотрю на это. –

ответ

140

app.use() предназначенный для ввода middleware в ваше применение. path является «креплением» или «префикса» путем и ограничивает промежуточный применять только к любым дорожкам просили, чтобы начать с ним. Он даже может быть использован для встраивания другого приложения:

// subapp.js 
var express = require('express'); 
var app = modules.exports = express(); 
// ... 
// server.js 
var express = require('express'); 
var app = express(); 

app.use('/subapp', require('./subapp')); 

// ... 

Указав / в качестве «монтирования» путь, app.use() ответит на любой путь, который начинается с /, которые все из них и независимо из HTTP глагола используется:

  • GET /
  • PUT /foo
  • POST /foo/bar
  • т.д.

app.get(), с другой стороны, является частью Экспресс application routing и предназначен для согласования и обработки конкретный маршрут, при запросе с GET HTTP глагола:

  • GET /

И, эквивалентная маршрутизация для примера app.use() на самом деле было бы:

app.all(/^\/.*/, function (req, res) { 
    res.send('Hello'); 
}); 
+2

Престижность упоминания встроенных приложений. Это очень удобный способ организовать экспресс-посредничество. – wprl

+4

Справедливости ради стоит сказать, что app.use может делать все, что угодно: app.get, app.post, app.put, но не наоборот? – ngungo

+0

еще трудно понять. – Jeb50

19

app.get вызывается, когда HTTP method установлен в GET, в то время как app.use вызывается независимо от метода HTTP, и, следовательно, определяет который находится поверх всех других типов RESTful, доступ к которым предоставляет экспресс-пакет.

+0

хорошо дополнение для использования(). – Jeb50

30

app.use является «низкий уровень» метод от Connect, в рамках промежуточного слоя, что Экспресс зависит.

Вот мое руководство:

  • Используйте app.get, если вы хотите, чтобы выставить метод GET.
  • Используйте app.use, если вы хотите добавить некоторое промежуточное программное обеспечение (обработчик HTTP-запроса до того, как он поступит на маршруты, которые вы настроили в Express), или если вы хотите, чтобы ваши маршруты были модульными (например, выставлять набор маршрутов из модуля npm, который могут использовать другие веб-приложения).
+0

Но если я не забочусь о методе, я могу использовать 'app.use' для обработки некоторых маршрутов? Или мы не должны использовать 'app.use' для маршрутизации. – Elemento0

+0

Вы можете использовать app.use для перемещения маршрутов для разделения файлов. users.js, buildings.js –

+0

, хотя один ответ выше этого собрал гораздо больше UP/AGREE, ваш ответ переводит сложную вещь, в том числе Middleware, на несколько простых слов, kudo. – Jeb50

23

Просто app.use означает «Выполнить это на ВСЕХ запросов»
app.get означает «Запустить на запрос GET, для данного URL»

Смежные вопросы