Знаете ли вы, что в 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 здесь.
Удачного кодирования!