показывать слаг продукта только без идентификатора в URL - PullRequest
0 голосов
/ 09 января 2019

У меня есть список объявлений, и когда пользователь нажимает на него, он выводит их на страницу сведений. Я просто хочу слизняк в 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);
    });
};

1 Ответ

0 голосов
/ 09 января 2019

Я бы сказал, что вам лучше всего контролировать слаг на стороне сервера на основе строки title, полученной от пользователя, и использовать выбранную библиотеку слагов. Затем вы можете проверить существующие записи и убедиться, что ваш слаг уникален - в худшем случае вы просто добавляете что-то к нему: вы можете иметь /red-bag, /red-bag-1 и так далее. По-прежнему лучше, чем UUID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...