В чем разница между app.use (), app.get (), router.get () и router.use () в Express js? - PullRequest
0 голосов
/ 24 ноября 2018

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

app.use('/user/:id', function (req, res, next) {
  console.log('Request Type:', req.method)
  next()
});
app.get('/user/:id', function (req, res, next) {
  res.send('USER')
});

router.get('/user/:id', function (req, res, next) {
  res.send('USER')
});

router.use('/user/:id', function (req, res, next) {
  res.send('USER')
});

Я, вы, ребята, можете помочь мне с этим.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

По умолчанию .use() имеет два основных различия: .get().

  1. .get() будет соответствовать только запросам GET, .use() будет соответствовать любому типу запроса (POST, PUT,GET и т.д.Это сделано таким образом, чтобы вы могли настроить обработчик промежуточного программного обеспечения, который будет запускать широкий набор URL, а не только один URL..get() чаще используется с ограниченными URL-адресами, такими как один конкретный URL-адрес.

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

Вы можете использовать маршрутизатор вместо объекта приложения по ряду причин:

  1. Модульность кода.Модуль создает свой собственный маршрутизатор, устанавливает на нем несколько маршрутов и затем экспортирует один маршрутизатор, который вызывающий абонент может добавить в текущее приложение.
  2. У вас есть несколько маршрутов с одинаковым префиксом ипосчитайте более понятным настроить маршрутизатор для этого общего префикса, а затем просто разместить маршруты на этом маршрутизаторе без необходимости указывать префикс в каждом из них.
  3. Чтобы создать набор маршрутов, использующих одно и то же промежуточное ПОобработка, но другие маршруты в вашем приложении не разделяют эту обработку промежуточного программного обеспечения.В этом случае вы создаете маршрутизатор, помещаете на него некоторое промежуточное программное обеспечение и затем определяете маршруты на этом маршрутизаторе.Промежуточное программное обеспечение будет запускаться только для маршрутов, маршрутизируемых на этот маршрутизатор.

Некоторые примеры:

// matches /hello and /hello/hi and /hello/goodbye for GET, POST or PUT
app.use('/hello', ...);

// matches only a GET request for /hello
app.get('/hello', ...);

Пример использования маршрутизатора для обеспечения модульности.

Модуль с определенными в нем маршрутами:

// some_routes.js
const router = require('express').Router();

router.use(someMiddlewareForWholeRouter);

router.get('/hello', ...);
router.get('/goodbye', ...);
router.get('/callme', ...);

module.exports = router;

Использование этого модуля в вашем приложении:

// app.js
const some_routes = require('./some_routes.js');

// hook up all routes from some_routes with the path prefix of /greeting
app.use('/greetings', some_routes);
0 голосов
/ 24 ноября 2018

.use () и .get () разница в том, что .use () будет прослушивать любой тип запроса, а .get () будет прослушивать только GET-запрос, например .post () .put () и т. Д.

Для маршрутизаторов вы можете рассматривать это как дополнительный маршрут.

Например, вы можете сделать что-то вроде этого.

router.get('/:id', (req, res, next) => {res.send('user')})
router.post('/', (req, res, next) => {/* some create user logic */})

app.use('/user', router) // if you do this routers will match '/user/:id' and '/user' path

и, конечно, вы можете иметь несколько маршрутизаторов в одном приложении.Таким образом, ваш код может быть более структурированным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...