ejs 和 Javascript 中的过滤器

编程入门 行业动态 更新时间:2024-09-28 15:30:02

ejs 和 Javascript 中的<a href=https://www.elefans.com/category/jswz/34/1769218.html style=过滤器"/>

ejs 和 Javascript 中的过滤器

所以我一直在尝试制作一个过滤器,根据创建产品的用户过滤产品,有两种可能性角色“管理员”或角色“成员”。

这是控制器

exports.getProducts = async (req, res, next) => {
  let filter = { userId: req.user._id }; // por defecto, solo mostrar productos del usuario autenticado
  const products = await Product.find().populate('userId');

  // si el usuario es admin, no aplicar filtro de usuario
  if (req.user.role === 'admin') {
    filter = {};
  }

  // Busca todos los usuarios
  User.find({})
    .then(users => {
      // Busca los productos según el filtro aplicado
      return Product.find(filter)
        .then(products => {
          res.render('admin/products', {
            prods: products,
            pageTitle: 'Admin Products',
            path: '/admin/products',
            users: users // Pasa los usuarios a la vista
          });
        });
    })
    .catch(err => {
      const error = new Error(err);
      error.httpStatusCode = 500;
      return next(error);
    });
};

这是视图.ejs

<%- include('../includes/head.ejs') %>
<link rel="stylesheet" href="/css/product.css">
<link rel="stylesheet" href="/css/forms.css">
</head>

<body>
    <%- include('../includes/navigation.ejs') %>

    <% if( role === "admin") { %>
    <div class="dropdown">
        <button class="btn">Created by</button>
        <div class="dropdown-content">
            <a href="#" id="me-link">Me</a>
            <a href="#" id="others-link">Others</a>
        </div>
        </div>
    <% } %>

    <main class="<%= role %>">
        <% if (prods.length > 0) { %>
        <div class="grid">
            <% let userIds = []; %>
            <% for (let product of prods) { %>
            <article class="card product-item <%= product.userId.role %>">
                <header class="card__header">
                    <h1 class="product__title">
                        <%= product.title %>
                    </h1>
                </header>
                <div class="card__image">
                    <img src="/<%= product.imageUrl %>" alt="<%= product.title %>">
                </div>
                <div class="card__content">
                    <h2 class="product__price">
                        <%= product.price %> €
                    </h2>
                    <p class="product__description">
                        <%= product.description %>
                    </p>
                </div>
                <div class="card__actions">
                    <a href="/admin/edit-product/<%= product._id %>?edit=true" class="btn">Edit</a>
                    <input type="hidden" value="<%= product._id %>" name="productId">
                    <input type="hidden" value="<%= product.userId %>" name="userId">
                    <input type="hidden" name="_csrf" value="<%= csrfToken %>">
                    <button class="btn" type="button" onclick="deleteProduct(this)">Delete</button>
                </div>
            </article>

             <% userIds.push(product.userId); } %> 
        </div>

        <% let userRolesIds = []; %>
        <% for (let user of users) { %>
            userRolesIds.push({ role: '<%= user.role %>', id: '<%= user._id %>' });
            
                     <% } %>
        <% } else { %>
        <h1>No Products Found!</h1>
        <% } %>
    </main>
    <%- include('../includes/end.ejs') %>
    <script src="/js/admin.js"></script>
    <script>
        const meLink = document.querySelector('#me-link');
        const othersLink = document.querySelector('#others-link');
        const main = document.querySelector('main');
        let role = '';

        meLink.addEventListener('click', (event) => {
            event.preventDefault();
            role = 'admin';
            main.classList.remove('member');
            main.classList.add('admin');
        });

        othersLink.addEventListener('click', (event) => {
            event.preventDefault();
            role = 'member';
            main.classList.remove('admin');
            main.classList.add('member');
        });

    </script>
</body>

最大的问题是,由于明显的原因,产品和用户在不同的集合中,因此在创建产品的 userId 中它们之间的引用。

我希望当我点击“我”按钮时隐藏角色“成员”制作的产品,当我点击“其他”按钮时反之亦然。

回答如下:

更多推荐

ejs 和 Javascript 中的过滤器

本文发布于:2024-05-31 02:14:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1771166.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:过滤器   ejs   Javascript

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!