SEO URL с дефисом - Nodejs - PullRequest
       2

SEO URL с дефисом - Nodejs

0 голосов
/ 20 апреля 2019

У меня есть ситуация, когда я хочу создать фильтры для моего приложения nodejs. Я хочу фильтровать товары по местоположению, мой текущий фильтр выглядит примерно так.

www.example.com/product-category?q=New%20York

Но я хочу вот так.

www.example.com/product-category/new-york

Как мне добиться этого через NodeJS / Express / Mongodb

1 Ответ

1 голос
/ 20 апреля 2019

Маршрутизатор

Чтобы получить "категорию" в качестве параметра url вместо параметров запроса , нам нужно изменитьсинтаксис немного

  • Параметр запроса: router.get('/someRoute').Затем назовите его с помощью GET /someRoute?city=paris
  • URL-параметра: router.get('/someRoute/:city').И мы называем это GET /someRoute/paris

Итак, в вашем случае, путь должен быть следующим:

app.get('/product-category/:city', (req, res) => {
  // Handle the request here

  const city = req.params.city;
});

Проблема %20

Вв случае Нью-Йорк вызов API включает пробел , который "кодируется" в %20.Если вы хотите преобразовать это в дефис , вы можете использовать:

  • String.toLowerCase() для строчных букв всех символов (Сиэтл => Сиэтл)
  • String.split() для разложения URL-адреса на блоки, разделенные %20
  • Array.filter() для удаления любых «пустых / пробелов» block
  • Array.join() для восстановления URL путем сшивания блоков с помощью дефисов -

Объединение этих частей вместебудет выглядеть так

const cities = ['New York', 'New%20York', '     New     york', '\tnew York'];

const format = s => s.toLowerCase()
                     .split(/\s|%20/)
                     .filter(Boolean)
                     .join('-');
                     
const clean = cities.map(format);

console.log(clean);

Собираем все вместе

const format = s => s.toLowerCase()
                     .split(/\s|%20/)
                     .filter(Boolean)
                     .join('-');

app.get('/product-category/:city', (req, res) => {
  // Get and format the "city" parameter
  const city = format(req.params.city);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...