Знаете ли вы, что в Express можно ограничить значения параметров маршрута?

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

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

Настраивать

Сначала займемся подготовкой.

mkdir myapp
cd myapp
npm init 
# Enter entry point: index.js when prompted. Ignore everything else
npm install express --save

Привет, мир

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

const express = require('express');
const app = express();
app.get('/', function(req, res, next) {
  res.send('Hello world!');
});
app.listen(3001, function() {
  console.log('App is listening on port 30001');
});

Примечание. Я использовал здесь синтаксис ES6, но var будет работать так же хорошо, как const

http: // localhost: 3001 / должен вернуть Hello world! в вашем браузере. Теперь, когда мы настроили базовое приложение Express и домашний (/) маршрут, давайте рассмотрим еще несколько простых случаев. Вы можете передать параметр URL в Express, используя запись (:). Допустим, у вашего приложения Hello World есть пользователи из разных регионов мира. Вы хотите, чтобы к вашему URL был добавлен языковой стандарт, чтобы определять, какой контент нужно обслуживать. Добавим для этого новый маршрут:

app.get('/:locale', function(req, res, next) {
  res.send('Hello '+ req.params.locale);
});

Теперь http: // localhost: 3001 / us выдаст вам Привет нам!. Фактически, все, что вы укажете в качестве первого параметра URL, будет отображаться как есть в вашем ответе.

Но что, если мы хотим ограничить значения параметра URL?

Это распространенный вариант использования, особенно в сценариях, подобных приведенному выше. Допустим, приложение Hello World поддерживает только два языка: us и uk. Теперь это означает, что если пользователь вводит / in, страница не должна отображать сообщение ‘Hello ‹locale›. Другими словами, нам нужен перечислимый параметр URL.

К счастью, Express выполняет маршрутизацию URL-адресов с помощью модуля под названием path-to-regexp.

path-to-regexp превращает строку пути в экспресс-стиле, например /foo/:bar, в регулярное выражение.

Вот пример того, что этот модуль делает с путем

var keys = []
var re = pathToRegexp('/foo/:bar', keys)
// re = /^\/foo\/([^\/]+?)\/?$/i
// keys = [{ name: 'bar', prefix: '/', delimiter: '/', optional: false, repeat: false, pattern: '[^\\/]+?' }]

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

app.get('/:locale(us|uk)', function(req, res, next) {
  res.send('Hello '+ req.params.locale);
});

Теперь мы видим, что получаем действительный ответ только для локалей us и us, поскольку мы использовали оператор унарной вертикальной черты (|) для перечисления допустимых значений для парам.

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

Код для этого доступен на GitHub здесь.

Удачного кодирования!