Разница между приложением.используйте () и маршрутизатор.использовать() в экспресс


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

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

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

3 61

3 ответа:

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) монтирует промежуточное ПО в path /первый, потом router.get наборы соответственно подпути.


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

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

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

app.get('/user', smaller);
  • если вы открываете /первый в браузере fun будет вызван,
  • на / sud,bigger будет
  • на / user,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());

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

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

но в приложение.use () вам нужно будет указать указанный путь следующим образом:

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

или

app.use('/ads', function(req, res, next) {

  // write your callback code here.

    });

но при использовании роутера.используйте() вы можете дать только промежуточное программное обеспечение, как это:

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.реклама.метод adListingAdmin.