Различия между express.Router и app.get?

Я начинаю с NodeJS и Express 4, и я немного запутался. Я читал сайт Express, но не вижу, когда использовать обработчик маршрута или когда использовать express.Router.

Как я мог видеть, если я хочу показать страницу или что-то, когда пользователь нажимает /show, например, я должен использовать:

var express = require('express')    
var app = express()    
app.get("/show", someFunction)  

Вначале я думал, что это старый (для Express 3). Правильно ли это, или это тоже путь для Express 4?

Если это способ сделать это в Express 4, для чего используется express.Router?

Я прочитал почти тот же пример, что и выше, но использую express.Router:

var express = require('express');
var router = express.Router();
router.get("/show", someFunction)

Итак, в чем разница между обоими примерами?

Какой из них мне следует использовать, если я просто хочу сделать простое тестирование сайта?

Ответ 1

app.js

var express = require('express'),
    dogs    = require('./routes/dogs'),
    cats    = require('./routes/cats'),
    birds   = require('./routes/birds');

var app = express();

app.use('/dogs',  dogs);
app.use('/cats',  cats);
app.use('/birds', birds);

app.listen(3000);

dogs.js

var express = require('express');

var router = express.Router();

router.get('/', function(req, res) {
    res.send('GET handler for /dogs route.');
});

router.post('/', function(req, res) {
    res.send('POST handler for /dogs route.');
});

module.exports = router;

Когда вызывается var app = express(), возвращается объект приложения. Думайте об этом как о главном приложении.

Когда вызывается var router = express.Router(), возвращается немного другое мини-приложение. Идея мини-приложения заключается в том, что каждый маршрут в вашем приложении может быть довольно сложным, и вам будет полезно переместить весь этот код в отдельный файл. Каждый файловый маршрутизатор становится мини-приложением, структура которого очень похожа на основное приложение.

В приведенном выше примере код для маршрута /dogs был перемещен в собственный файл, поэтому он не загромождает основное приложение. Код для /cats и /birds будет структурирован аналогично в их собственных файлах. Разделив этот код на три мини-приложения, вы можете работать над логикой для каждого из них в отдельности и не беспокоиться о том, как это повлияет на два других.

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

Ответ 2

Экспресс 4.0 поставляется с новым маршрутизатором. Как уже упоминалось на сайте:

Класс express.Router может использоваться для создания модульного монтируемого маршрута. обработчики. Экземпляр маршрутизатора - это полное промежуточное ПО и маршрутизация. система; по этой причине его часто называют "мини-приложением".

На https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 есть хорошая статья, которая описывает различия и что можно сделать с маршрутизаторами.

Подводя итог

С помощью маршрутизаторов вы можете упростить модульный код. Вы можете использовать маршрутизаторы как:

  1. Основные маршруты: Домой, О
  2. Направьте Middleware для регистрации запросов к консоли
  3. Маршрут с параметрами
  4. Направьте промежуточное программное обеспечение для параметров для проверки определенных параметров
  5. Проверяет параметр, переданный на определенный маршрут

Примечание:

Объект app.router, который был удален в Express 4, вернулся в Express 5. В новой версии это просто ссылка на базовый маршрутизатор Express, в отличие от Express 3, где приложение должно было явно загружать Это.

Ответ 3

app.route('/book')
  .get(function (req, res) {
    res.send('Get a random book')
  })
  .post(function (req, res) {
    res.send('Post a random book')
  })

Как и в предыдущем примере, мы можем добавить другой метод HTTP-запроса в маршрут.

Ответ 4

Допустим, ваше приложение немного сложное. Поэтому сначала мы делим приложение на несколько модулей, чтобы изменения в одном модуле не загромождали другие, и вы могли продолжать работу над отдельными модулями, но в конце дня вам необходимо интегрировать все в один, поскольку вы строим одно приложение. Это похоже на то, что у нас есть одно основное приложение и несколько дочерних приложений, чьим родителем является основное приложение. Поэтому, когда мы создаем родительское приложение, мы создаем его, используя

var express = require('express');
var parent = express();

И к этому родительскому приложению нам нужно ввести дочерние приложения. Но поскольку дочерние приложения не являются совершенно разными приложениями (поскольку они выполняются в одном и том же контексте context-java), Express предоставляет способ сделать это с помощью функции Expresse Router, и это то, что мы делаем в каждом файле дочернего модуля и Давайте назовем один такой дочерний модуль как aboutme.

var express = require('express');
var router = express.Router();
/**
** do something here
**/
module.exports = router;

С помощью module.exports мы делаем этот модуль доступным для использования другими, и, поскольку у нас есть модульные вещи, нам нужно сделать файлы модулей доступными для родительского приложения с помощью функции require узла, как и любые другие сторонние модули, и родительский файл выглядит что-то вроде этого.

var express = require('express') 
var parent = express() 
var child = require(./aboutme)

после того, как мы сделаем этот дочерний модуль доступным для родителя, нам нужно сообщить родительскому приложению, когда использовать это дочернее приложение. Допустим, когда пользователь выбирает путь aboutme, нам нужно, чтобы дочернее приложение обо мне обрабатывало запрос, и мы делаем это с помощью метода использования Expresse.

parent.use('/aboutme',  aboutme);

и в одном кадре родительский файл выглядит следующим образом

var express = require('express');
var parent = express();
var child = require(./aboutme);
/***
**do some stuff here
**/
parent.use('/aboutme',child);

Прежде всего, что может сделать родитель, так это запустить сервер там, где ребенок не может. Надеюсь, это проясняет. Для получения дополнительной информации вы всегда можете посмотреть исходный код, который занимает некоторое время, но дает вам много информации. Спасибо.

Ответ 5

Использование app.js для записи маршрутов означает, что они доступны для всех пользователей, так как app.js загружается при запуске приложения. Однако размещение маршрутов в мини-приложения express.router() защищает и ограничивает их доступность.

Ответ 6

express.Router имеет много вариантов:

  • Включить регистр чувствительности. /show маршрут не то же самое /Show, но по умолчанию это disabled
  • режим строгой маршрутизации. что /show/ не то же самое /show а также отключено по умолчанию
  • Вы можете добавить определенное промежуточное программное обеспечение для определенных маршрутов.

Ответ 7

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