我有很多产品,并希望为每个产品动态创建路由,所以当我向CMS添加产品时,我正在进行API调用以获取JSON,它会自动创建页面而不是手动编码。
快递:
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。该架构尚未完全播种,因此我需要将其调整到我的树中。
答案 0 :(得分:0)
您可能不想为每个产品创建新路线。您可能希望创建一个处理所有产品的路径,然后在路径中指定一个参数(路径的一部分或查询参数),告诉单路由处理程序它应该显示哪个产品。
具体操作方式取决于您网站的整体网址设计。但是,您可以拥有/product/view/:productName
的路线。或/product/view/:productID
并有一个处理所有产品的路由处理程序。如果有人输入了不存在的productName
或productID
,那么您只需要做一个不错的404页面。
此路由的一个路由处理程序将从URL中获取productName或productID(取决于您要设计的那个),然后在数据库中查找有关该产品的所有相关信息。然后,它会将所有数据放入数据结构(可能是具有大量属性的对象),然后将该数据结构传递给res.render(templateName, data)
。然后,模板引擎会将数据放入生成的HTML页面中,如模板所指定的那样。
如果某些产品显示不同类型的信息,那么您的模板必须是需要显示的所有内容的超集,并且您可以根据传递给{的数据中的模板是否存在来编码模板以显示各种信息。 {1}}。