Разница между app.use () и router.use () в Express

Я просто читал документацию на express и нашел эти два условия: app.use(); и router.use();

Я знаю app.use(); используется в узле для установки промежуточного программного обеспечения на пути, и мы часто используем его в большинстве приложений узла. но что такое router.use(); они оба одинаковы? если нет, то какая разница?

Я читал о маршрутизаторе здесь . Я также нашел похожие вопросы о SO. В чем разница между «express.Router» и маршрутизацией с использованием «app.get»? и Разница между app.all (‘*’) и app.use (‘/’) , но они действительно не отвечают на мой вопрос. Благодарю.

router.get предназначен только для определения подпапок. Рассмотрим этот пример:

 var router = express.Router(); app.use('/first', router); // Mount the router as middleware at path /first router.get('/sud', smaller); router.get('/user', bigger); 
  • Если вы откроете / first / sud , тогда будет вызвана функция smaller .
  • Если вы откроете / первый / пользователь , тогда будет вызвана bigger функция.

Короче говоря, app.use('/first', router) монтирует промежуточное программное обеспечение по пути / сначала , тогда router.get устанавливает подпуть.


Но если мы вместо этого используем следующее:

 app.use('/first', fun); app.get('/sud', bigger); app.get('/user', smaller); 
  • Если вы откроете / первый в своем браузере, fun будет вызвана,
  • Для / sud , bigger будет вызвано
  • Для пользователя / пользователя , smaller будет вызвано

Но помните, для / first / sud , никакая функция не будет вызвана.

Эта ссылка также может помочь: http://expressjs.com/api.html#router

router.use(); монтирует промежуточное программное обеспечение для маршрутов, обслуживаемых определенным маршрутизатором, app.use(); монтирует промежуточное ПО для всех маршрутов приложения (или тех, которые соответствуют маршрутам, указанным, если вы используете app.use('/ANYROUTESHERE', yourMiddleware()); ).

Пример использования может быть приложением с одним маршрутизатором со стандартными маршрутами и одним маршрутизатором, который обрабатывает маршруты api, которым нужен действительный пользователь.

Затем вы смонтируете промежуточное ПО аутентификации для маршрутизатора api только с помощью router.use(yourAuthMiddleware()); ,

Если у вас есть приложение, хотя для этого требуется действительный пользователь для всех маршрутов, установите промежуточное программное обеспечение для приложения с помощью app.use(yourAuthMiddleware());

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

router.use () используется для функции или функций промежуточного программного обеспечения. По умолчанию путь монтирования к «/».

Но в app.use () вам нужно указать указанный путь:

  var adsRouter = require('./adsRouter.js'); app.use('/ads', adsRouter); 

или же

 app.use('/ads', function(req, res, next) { // write your callback code here. }); 

Но при использовании router.use () вы можете предоставить только промежуточное ПО, например:

 router.use(function(req, res, next) { console.log('%s %s %s', req.method, req.url, req.path); next(); }); 

или же

 router.use('/test', function(req, res, next) { // write your callback code here. next(); }); 

или же

 //in router.js router.use('/admin', authUtil.verifySessionId, authUtil.verifyLisencee); router.post('/admin', controllerIndex.ads.adListingAdmin); 

В приведенном выше коде, когда конечной точкой является «/ admin», сначала сначала вызывается authUtil.verifySessionId и authUtil.verifyLisencee, затем она будет исполнять следующую строку с конечной точкой «admin» и в соответствии с методом controllerIndex.ads.adListingAdmin.