Я новичок в выражениях и node.js и не могу понять разницу между app.use и app.get. Кажется, вы можете использовать их обоих для отправки информации. Например:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
кажется, так же, как это:
app.get('/', function (req,res) {
res.send('Hello');
});
Ответы:
app.use()
предназначен для привязки промежуточного программного обеспечения к вашему приложению. Это путьpath
« mount » или « prefix », который ограничивает промежуточное программное обеспечение только для всех запрошенных путей, начинающихся с него. Он может даже использоваться для встраивания другого приложения:Указывая путь
/
« монтирования », выapp.use()
будете реагировать на любой путь, который начинается с/
каждого из них, независимо от используемого глагола HTTP:GET /
PUT /foo
POST /foo/bar
app.get()
с другой стороны, является частью маршрутизации приложений Express и предназначена для сопоставления и обработки определенного маршрута при запросе сGET
глаголом HTTP:GET /
И эквивалентная маршрутизация для вашего примера
app.use()
будет:( Обновление: попытка лучше продемонстрировать различия. )
Методы маршрутизации, в том числе
app.get()
, являются удобными методами, которые помогают вам более точно выровнять ответы на запросы. Они также добавляют поддержку таких функций, как параметры иnext('route')
.Внутри каждого
app.get()
есть вызовapp.use()
, так что вы можете сделать все этоapp.use()
напрямую. Но для этого часто требуется (вероятно, излишне) переопределение различных объемов стандартного кода.Примеры:
Для простых статических маршрутов:
против
С несколькими обработчиками для одного маршрута:
против
С параметрами:
против
источник
path-to-regexp
или что-то еще, и вы можете использовать параметры маршрута непосредственно в первом аргументеuse
метода.app.use
это метод «нижнего уровня» Connect, от которого зависит промежуточное ПО, от которого зависит Express.Вот мое руководство:
app.get
если вы хотите выставить метод GET.app.use
если вы хотите добавить некоторое промежуточное программное обеспечение (обработчик для HTTP-запроса до того, как он прибудет на маршруты, которые вы настроили в Express), или если вы хотите сделать свои маршруты модульными (например, предоставить набор маршрутов). из модуля npm, который могут использовать другие веб-приложения).источник
app.use
для обработки некоторых маршрутов? Или мы никогда не должны использоватьapp.use
для маршрутизации.Просто app.use означает «Запустить это по ВСЕМ запросам».
App.get означает «Запустить это по GET-запросу для данного URL».
источник
app.get
вызывается, когда для HTTP-метода установлено значениеGET
, тогда какapp.use
вызывается независимо от метода HTTP и поэтому определяет уровень, который находится поверх всех других типов RESTful, к которым экспресс-пакеты предоставляют вам доступ.источник
Разница между
app.use
&app.get
:app.use
→ Обычно он используется для внедрения промежуточного программного обеспечения в вашем приложении и может обрабатывать все типы HTTP-запросов.app.get
→ Это только для обработки запросов GET HTTP.Теперь между
app.use
&app.all
. Несомненно, в них есть одна общая черта: оба могут обрабатывать все виды HTTP-запросов. Но есть некоторые отличия, которые рекомендуют нам использовать app.use для middlewares и app.all для обработки маршрутов.app.use()
→ Требуется только один обратный вызов.app.all()
→ Это может занять несколько обратных вызовов.app.use()
будет только видеть, начинается ли URL с указанного пути.Но,
app.all()
будет соответствовать полный путь.Например,
next()
вызов внутриapp.use()
будет вызывать либо следующее промежуточное программное обеспечение, либо любой обработчик маршрута, ноnext()
вызов внутриapp.all()
вызовет только следующий обработчик маршрута (app.all()
иapp.get/post/put...
т. д.). Если после этого будет какое-либо промежуточное программное обеспечение, оно будет пропущено. Поэтому рекомендуется размещать все промежуточные программы всегда над обработчиками маршрутов.источник
next()
внутриapp.all('/*', ...)
будет на самом деле выполнитьapp.use('/', ...)
позже в файле. Может быть, я неправильно понял вас там. Очень полезное объяснение в противном случае.Помимо приведенных выше объяснений, что я испытываю:
будет соответствовать всем запросам, начинающимся с '/ book' в качестве URL. так что это также соответствует '/ book / 1' или '/ book / 2'
соответствует только GET-запросу с точным соответствием . Он не будет обрабатывать URL-адреса, такие как «/ book / 1» или «/ book / 2»
Так что, если вам нужен глобальный обработчик, который обрабатывает все ваши маршруты, тогда
app.use('/')
это вариант.app.get('/')
будет обрабатывать только корневой URL.источник