Подтвердить что ты не робот

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

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

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

Я читал о маршрутизаторе здесь. Я также нашел похожие вопросы о SO В чем разница между "express.Router" и маршрутизация с использованием "app.get" ?  и Разница между app.all('*') и app.use('/'), но они не отвечают на мой вопрос. Спасибо.

4b9b3361

Ответ 1

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. Если вы откроете first/user, тогда будет вызван bigger. Короче говоря, app.use('/first', router) монтирует промежуточное ПО по пути /first, тогда router.get соответственно устанавливает соответствующий подкаталог.

Но если вместо этого использовать:

app.use('/first', fun);

app.get('/sud', bigger);

app.get('/user', smaller);

Теперь, если вы откроете /first в своем браузере, тогда будет вызван fun, а для /sud будет вызван bigger, а для /user, функция smaller будет вызвана.... но помните здесь, что для /first/sud функция не будет вызвана.

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

Ответ 2

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

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

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

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

Ответ 3

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" и в соответствии с контроллеромIndex.ads.adListingAdmin.