如何从数据库动态创建EJS文件

时间:2018-07-09 10:58:30

标签: mongodb express mongoose routing ejs

新的Web开发人员在这里;我正在使用Mongo / Express / Node。

我正在尝试创建一个电子商务站点,管理员将在其中创建新的“类别”并将其添加到数据库中。

每当将一个新的“类别”添加到数据库中时,我都希望为该类别(以及数据库中的所有其他类别)创建一个新的EJS页面,然后将加载所有属于以下类别的“产品”该EJS页面中的该类别。

类别页面应符合模板;仅更改其名称和加载到其中的产品。

类似这样的东西:

<html>
    <body>
        <nav>
            <h2>Categories</h2>
            <div class="menu">
                <a>Men</a>
                <a>Women</a>
                <a>Children</a>
            </div>
        </nav>

        <% products.forEach(function(product) { %>
            <% if (product.category === x) { %>
                <h5><%= product.name %></h5>
                <img src='someurl'>
            <% } %>
        <% }) %>
    </body>
</html>

谢谢。

1 个答案:

答案 0 :(得分:1)

幸运的是,您不需要动态创建EJS文件。您可以使用parameterised route matching,然后在EJS页面的render函数中返回该类别的正确数据。这就是使用动态网页的美妙之处!

server.js
const express = require("express");
const app = express();

app.get("/example/:category", (req, res) => {
    let { category } = req.params;
    let products = /* search db for category that matches that "category" var */;
    res.render("products.ejs", { products });
});
products.ejs
...
<% products.forEach(product => { %>
    <h5><%= product.name %></h5>
    <img src="<%= product.imageURL %>">
<% }); %>
...

例如,如果用户访问/example/food,则category变量参数将等于"food"。然后,您可以将其传递给EJS渲染函数。