Статьи

Понимание маршрутизации ExpressJS

Express — это популярный веб-фреймворк Node.js. Помимо своей функциональности он предоставляет оболочку для маршрутизации. Экспресс-маршрутизатор помогает в создании обработчиков маршрутов. Из этого руководства вы узнаете, как работать с Express Router.

Давайте начнем.

Создайте новый каталог для вашего приложения. Запустите команду для инициализации npm в каталоге, который вы только что создали.

1
npm init -y

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

1
npm install —save express

В конце ваш файл package.json должен выглядеть следующим образом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
#package.json
 
{
  «name»: «express-router»,
  «version»: «1.0.0»,
  «description»: «»,
  «main»: «index.js»,
  «scripts»: {
    «test»: «echo \»Error: no test specified\» && exit 1″
  },
  «keywords»: [],
  «author»: «»,
  «license»: «ISC»,
  «dependencies»: {
    «express»: «^4.16.2»
  }
}

Теперь создайте новый файл с именем index.js, который будет вашим входным файлом, как указано в вашем package.json .

На данный момент вам просто нужна базовая настройка, подобная этой:

1
2
3
4
5
6
7
8
9
#index.js
 
const express = require(‘express’)
 
const app = express()
 
app.listen(3000, () => {
  console.log(`Server running at port 3000`)
})

Начните с создания некоторых основных маршрутов, как у меня ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
#index.js
 
 
const router = express.Router() // 1
 
router.get(‘/’, (req, res) => { // 2
  res.send(‘This is the homepage!’)
})
 
router.post(‘/contact’, (req, res) => { // 3
  res.send(‘This is the contact page with a POST request’)
})
 
app.use(‘/’, router) // 4
 
  1. Экземпляр Express Router создан. Экземпляр установлен в переменную с именем router. Эта переменная будет использоваться всякий раз, когда вы хотите создать маршрут.
  2. Для маршрута GET определен новый маршрут к корню приложения. Он прикреплен к экземпляру класса Express Router.
  3. Для метода POST определен новый маршрут к странице контактов приложения. Он прикреплен к экземпляру класса Express Router.
  4. Это устанавливает некоторое промежуточное программное обеспечение, которое будет использоваться для обработки ваших маршрутов. Здесь вы сообщаете своему приложению, что хотите использовать маршрутизатор (который является экземпляром Express Router) для каждого запроса к приложению, который соответствует пути '/' . Если вам не удалось смонтировать путь на этом промежуточном программном обеспечении, он будет выполняться для каждого запроса, сделанного приложению.

Допустим, вместо этого у вас был код ниже.

1
app.use(‘/user’, router)

Это будет соответствовать всем следующим параметрам: / user / profile , user / profile / edit , user / dashboard / article / view и так далее.

В приведенном выше коде вы прикрепили метод маршрута к экземпляру Express Router. Метод маршрута получен из одного из методов HTTP и прикреплен к экземпляру Express Router, как вы это сделали.

Express поддерживает следующие методы маршрутизации, которые соответствуют методам HTTP: получить , отправить , положить , направить , удалить , параметры , трассировать , скопировать , заблокировать , mkcol , переместить , очистить , разблокировать , сообщить , mkactivity , оформить заказ , объединить , m-search , уведомлять , подписываться , отписываться , исправлять и искать .

Существует метод маршрутизации app.all() который не является производным от какого-либо метода HTTP. Этот метод маршрутизации загружается для функций по указанному пути для всех методов запроса.

Скажем, у вас есть код ниже в вашем приложении.

1
2
3
app.all(‘/books’, (req, res) => {
  res.send(‘This accesses the book section’)
})

Это будет выполнено для запросов к «/ books», когда вы используете GET, POST, PUT или любой метод HTTP-запроса.

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

Вот примеры, которые вы можете добавить в свой файл index.js .

1
2
3
4
5
6
7
8
9
#index.js
 
router.get(‘/about’, (req, res) => {
  res.send(‘This route path will match to /about’)
})
 
router.get(‘/profile.txt’, (req, res) => {
  res.send(‘This route will match to /profile.txt’)
})

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

1
2
3
4
5
6
7
router.get(‘/ab+xy’, (req, res) => { // 1
  res.send(‘ab+xy’)
})
 
router.get(‘/ab(xy)?z’, (req, res) => { // 2
  res.send(‘/ab(xy)?z’)
})
  1. Маршрут будет соответствовать abxy , abbxy , abbbxy и так далее.
  2. Маршрут будет соответствовать / abz и / abxyz .

Они используются для захвата значений, указанных в определенной позиции в URL. Они называются сегментами URL. Полученные значения становятся доступными в объекте req.params , используя имя параметра маршрута, указанного в пути, в качестве ключей значений.

Вот пример.

Если у вас есть путь к маршруту, аналогичный указанному в вашем приложении: /users/:userId/articles/: articleId /users/:userId/articles/: articleId

Запрошенный URL будет выглядеть следующим образом: http: // localhost: 3000 / users / 19 / article / 104

В req.params будет доступно следующее: { "userId": "19", "bookId": "104" }

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

1
2
3
router.get(‘/users/:userId/articles/:articleId’, (req, res) => {
  res.send(req.params)
})

Запустите свой сервер и укажите в браузере адрес http: // localhost: 3000 / users / 19 / article / 104 . Вы увидите объект req.params отображаемый в вашем браузере.

Имя параметров маршрута должно состоять из буквенных символов ([A-Za-z0-9_]) .

Давайте продолжим!

Скажем, вы хотите иметь путь маршрута с именем /users/:name , где имя пользователя передается в URL, а приложение отображает имя вместе со строкой. Как вы думаете, чего можно достичь?

Идите вперед и попробуйте сначала самостоятельно.

Вот как должен выглядеть маршрут.

1
2
3
router.get(‘/users/:name’, (req, res) => {
  res.send(`Welcome, ${req.params.name}!`)
})

Когда вы посещаете http: // localhost: 3000 / users / vivian , вы должны увидеть Welcome, vivian ! отображается в браузере.

Давайте посмотрим, как создать маршрут входа в Express. Ваши маршруты входа в систему требуют двух действий на одном пути маршрута. Действия будут дифференцированы по используемому методу маршрута. Вот как это будет выглядеть.

1
2
3
4
5
6
7
router.get(‘/login’, (req, res) => {
  res.send(‘This is should lead to the login form’)
})
 
router.post(‘/login’, (req, res) => {
  res.send(‘This is used in processing the form’)
})

После этого в форме вашего хранилища должно появиться действие, значением которого является маршрут, определенный методом HTTP POST. Вот как это должно выглядеть.

1
2
3
<form action=»/login» method=»POST»>
   
</form>

При нажатии кнопки отправки в форме вызывается указанный маршрутизатор. Разница между обоими путями маршрута, как указано выше, заключается в HTTP POST. Так приложение определяет, кто отвечает за обработку данных, передаваемых через форму.

Еще один аспект, в котором это может возникнуть, — это редактирование и обновление ресурсов.

app.route() можно использовать для создания цепочки обработчиков маршрутов для определенного пути маршрута.

На примере маршрута входа в систему вы увидите, как вы будете использовать app.route() .

1
2
3
4
5
6
7
8
app.route(‘/login’)
 .get((res, req) => {
   res.send(‘This is should lead to the login form’)
 })
 
 .post((res, req) => {
   res.send(‘This is used in processing the form’)
 })

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

На этом этапе вы должны знать, как работает маршрутизация в Express. Вы узнали, как настроить базовую маршрутизацию, а также как работать с методами маршрутов и путями. Вы видели, как использовать параметры маршрута и получать значения, отправленные через URL.

Если вы ищете дополнительные ресурсы JavaScript для изучения или использования в своей работе, посмотрите, что у нас есть на Envato Market .

Обладая этими знаниями, вы можете пойти дальше, чтобы создать приложение Express со сложной маршрутизацией.