node.js - 带有连字符的 SEO url - Nodejs
问题描述
我有一种情况,我想为我的 nodejs 应用程序创建过滤器。我想根据位置过滤产品,我当前的过滤器如下所示。
www.example.com/product-category?q=New%20York
但我想要这样。
www.example.com/product-category/new-york
我如何通过 NodeJS/Express/Mongodb 实现这一点
解决方案
路由器
要将“类别”作为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
. 如果要将其转换为连字符,可以使用:
String.toLowerCase()
将所有字符小写(西雅图 => 西雅图)String.split()
将 URL 分解为由分隔的块%20
Array.filter()
删除任何“空/空白”块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);
});
推荐阅读
- c++ - 使用向量和迭代器的向量的奇怪分段错误
- azure - 导入数据库 bacpac 防火墙问题
- python - 使用 pip 在 Windows 10 上安装 Jupyter 时出错
- dataframe - 如何将数据框转换为变量
- sql - 找出格式不同的不同日期之间的差异
- java - 我无法理解负 2 和正 2 x=-10 % 4;System.out.println("-10% 4 : "+x); //-2
- linux - 使用 csv 文件的部分文件名创建 2 个新列
- python - 如何正确更新dict中的dict?(Python)
- python - 如何从 python 列表中删除子字符串
- c# - 为什么我不能在 Visual Studio 的另一个项目中为同一个文件添加另一个链接?