У меня есть список объявлений, и когда пользователь нажимает на него, он выводит их на страницу сведений. Я просто хочу слизняк в URL, т.е.:
https://someshop.com/red-bag
Я могу сделать это, но проблема в том, что названия продуктов не уникальны, так как в какой-то момент более одного пользователя могут захотеть добавить «красную сумку». Итак, что я сделал, так это использовал ID и слаг, например:
https://someshop.com/4d35c2fcef9b6c17167ff53y/red-bag
Но это выглядит не очень хорошо. Есть ли способ по-прежнему проверять идентификатор, но не отображать его в URL-адресе?
html href:
<a href="/products/<%= product._id %>/<%= product.titleSlug %>" class="listing-item-container">
маршрутизатор:
router.get('/products/:productId/:titleSlug', shopController.getProductDetail);
Контроллер:
exports.getProductDetail = (req, res, next) => {
const titleSlug = req.params.titleSlug;
const productId = req.params.productId;
Product.findOne({titleSlug: titleSlug, _id: productId})
.then(product => {
res.render('shop/product-detail', {
pageTitle: 'Product detail',
path: '/products',
product: product
});
})
.catch(err => {
console.log(err);
});
};