使用JSON响应中的Express和EJS模板动态创建路径

时间:2017-03-07 23:46:20

标签: json node.js express ejs

我有很多产品,并希望为每个产品动态创建路由,所以当我向CMS添加产品时,我正在进行API调用以获取JSON,它会自动创建页面而不是手动编码。

JSON Tree

快递:

var scopedEntries;

//get contentful entries
client.getEntries() //get entries
.then(function (entries){
  scopedEntries = entries; //assigning globally to later pass into routes
  console.log(entries.items[0].fields.companyName); //log data
}); // end of promise

router.get('/test:id', function (req, res) {
  //console.log(scopedEntries);
  res.render('test' + req.params.id, {
    entries: scopedEntries
    });
  });

模板示例:

<html>
  <head>
    <title>TEST APP</title>
  </head>
  <body>
    <h1><%= entries.items[0].fields.companyName %></h1>
    <h2><%= entries.items[1].fields.productName %></h2>
    <p>Description: <%= entries.items[1].fields.productDescription %></p>
    <p>Size: <%= entries.items[1].fields.sizetypecolor %></p>
    <p>Price: <%= entries.items[1].fields.price %></p>
    <p>SKU: <%= entries.items[1].fields.productDescription %></p>
    <img src="<%= entries.includes.Asset[0].fields.file.url %>" alt="" />
  </body>
</html>

因此,理想情况下,JSON响应中的每个项目都有一个页面,并且它是在快速路由中使用EJS动态创建的。我该如何正确地做到这一点。

此外,JSON不是最终的JSON。该架构尚未完全播种,因此我需要将其调整到我的树中。

1 个答案:

答案 0 :(得分:0)

您可能不想为每个产品创建新路线。您可能希望创建一个处理所有产品的路径,然后在路径中指定一个参数(路径的一部分或查询参数),告诉单路由处理程序它应该显示哪个产品。

具体操作方式取决于您网站的整体网址设计。但是,您可以拥有/product/view/:productName的路线。或/product/view/:productID并有一个处理所有产品的路由处理程序。如果有人输入了不存在的productNameproductID,那么您只需要做一个不错的404页面。

此路由的一个路由处理程序将从URL中获取productName或productID(取决于您要设计的那个),然后在数据库中查找有关该产品的所有相关信息。然后,它会将所有数据放入数据结构(可能是具有大量属性的对象),然后将该数据结构传递给res.render(templateName, data)。然后,模板引擎会将数据放入生成的HTML页面中,如模板所指定的那样。

如果某些产品显示不同类型的信息,那么您的模板必须是需要显示的所有内容的超集,并且您可以根据传递给{的数据中的模板是否存在来编码模板以显示各种信息。 {1}}。