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