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

Какая разница между промежуточным ПО уровня приложения и маршрутизатора при маршрутизации в Express?

В Экспресс-документах говорится:

Средство промежуточного уровня приложения привязывается к экземпляру express, используя app.use() и app.VERB().

Средство промежуточного уровня уровня маршрутизатора работает как промежуточное ПО уровня приложения, за исключением того, что они привязаны к экземпляру express.Router(). Система промежуточного программного обеспечения, созданная на уровне приложения в приведенном выше примере, может быть реплицирована на уровне маршрутизатора с использованием следующего кода.

В приложении, предоставленном генератором Express, я вижу в главном app.js:

var routes = require('./routes/index');
app.use('/', routes);

И в ./routes/index.js я вижу следующее:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

Какова цель app.use передать его router.get вместо простого использования app.get? И вообще, какая разница между app.VERB и router.VERB в терминах маршрутизации?

4b9b3361

Ответ 1

Какова цель приложения app.use передать его в router.get вместо простого использования app.get?

Все это просто проектирование для модульности. Это позволяет разделить приложение на несколько более мелких слабосвязанных фрагментов, и поскольку все они не имеют прямого знания об общем экземпляре app, который объединяет их вместе, достигается модульность.

Например, вы можете создать целую подсистему учетной записи пользователя, которая обрабатывает регистрацию, вход в систему, забыл пароль и т.д. и делится ею между несколькими различными приложениями, "устанавливая" ее внутри них через app.use(require("my-user-system")).

Это единственная цель, стоящая за этим. Там нет никакой функциональной, технической или разницы в производительности.

И вообще, какая разница между app.VERB и router.VERB с точки зрения маршрутизации?

Никакой разницы. Приложение имеет собственный основной/основной маршрутизатор, а app.VERB - это просто саксофон для удобства эквивалента app.router.VERB.

Ответ 2

Пример поможет здесь:

В birds.js:

// birds.js

var express = require('express');
var router = express.Router();

// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
    console.log('Time: ', Date.now());
    next();
});
// define the home page route
router.get('/', function (req, res) {
    res.send('Birds home page');
});

В app.js:

// app.js

var birds = require('./birds');
app.use('/birds', birds);

Теперь запросы http://localhost:3000/birds/ будут отправляться в файл birds.js.

Этот модульный подход упростит работу с большой базой кода, так как приложение станет большим.

Источник: https://expressjs.com/en/guide/routing.html