带连字符的SEO网址-Node.js

时间:2019-04-20 19:06:17

标签: node.js express url

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

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

但是我想要这样。

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

如何通过NodeJS / Express / Mongodb实现这一目标

1 个答案:

答案 0 :(得分: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;
});

%20问题

对于纽约,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);
});