首页 > 解决方案 > 带有连字符的 SEO url - Nodejs

问题描述

我有一种情况,我想为我的 nodejs 应用程序创建过滤器。我想根据位置过滤产品,我当前的过滤器如下所示。

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

但我想要这样。

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

我如何通过 NodeJS/Express/Mongodb 实现这一点

标签: node.jsexpressurl

解决方案


路由器

要将“类别”作为url 参数而不是查询参数,我们需要稍微更改语法

  • 查询参数: router.get('/someRoute')。然后调用它GET /someRoute?city=paris
  • 网址参数: router.get('/someRoute/:city')。我们称之为GET /someRoute/paris

所以在你的情况下,要走的路是:

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

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

%20问题_

New York的情况下,API 调用包括一个空格字符,该字符被“编码”%20. 如果要将其转换为连字符,可以使用:

把这些部分放在一起看起来像这样

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);
});

推荐阅读