SEO url с дефисом — Nodejs

#node.js #express #url

#node.js #экспресс #url

Вопрос:

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

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

  

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

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

  

Как я могу добиться этого с помощью NodeJS / Express / Mongodb

Комментарии:

1. как выглядит ваш экспресс-маршрут?

2. router.get('/:slug/', function (req, res, next) {}

Ответ №1:

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

Чтобы получить «категорию» в качестве параметра 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;
});
  

Проблема

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

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

Объединение этих частей будет выглядеть следующим образом

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

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

console.log(clean);  

Объединение всего вместе

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

app.get('/product-category/:city', (req, res) => {
  // Get and format the "city" parameter
  const city = format(req.params.city);
});