如何在视图node.js中显示视图

时间:2019-01-14 15:29:51

标签: node.js express ejs

我的仪表板有一个视图,路线和控制器。我也有小部件的路线,视图和控制器。我想要在仪表板上显示这些小部件。如果我去localhost:3000/widget,我实际上可以看到从数据库中提取的数据,并且一切正常。但是,如果我尝试在仪表板视图上添加如下内容:

<%- include('../widget/widget.ejs') %>

然后没有任何数据显示,我在控制台中看不到任何错误。正确的方法是什么?

这是小部件路线:

router.get('/widget', isAuth, widgetController.getIndex);

小部件控制器:

const Product = require("../models/product");

exports.getIndex = (req, res, next) => {
 Product.find({ "requests.userId": req.user }, {title: 1})
    .then(product => {
      res.render("widget/widget", {
        path: "/widget",
        product: product
      });
    })
    .catch(err => {
      console.log(err);
    });
};

小部件视图:

            <% for (const products of product) { %>
            <li><i class="list-box-icon sl sl-icon-doc"></i>
                <strong><%= products.title %></strong>
            </li>
            <% } %>

仪表板路线:

router.get('/dashboard', accountController.getDashboard);

仪表板控制器包含很多代码,因此我将其简化为最简单的形式。

exports.getDashboard = (req, res, next) => {
  if (req.user._id == '5d57abbd24e21t41u56c1t66') {
    Product.find({ status: "pending" })
    .sort({ createdAt: -1 })
    .then(products => {
      res.render("account/dashboard", {
        pageTitle: "Dashboard",
        path: "/dashboard",
        products: products
      });
    })
    .catch(err => {
      const error = new Error(err);
      error.httpStatusCode = 500;
      return next(error);
    });

1 个答案:

答案 0 :(得分:1)

对,所以您看到的问题是在小部件路线中,您从数据库中提取了数据,然后将其呈现给组件ejs。在仪表板视图中,include指令仅呈现ejs模板中的HTML,没有数据可填充。

您的选择有几个。最简单(尽管可能不是最有效的)可能是只在仪表板中执行相同的数据库查询,然后将相关数据包含在要发送到视图的本地对象中。

如注释中所述,另一种常见方法是通过ajax发出客户端请求,该请求调用小部件端点并将结果注入适当位置的仪表板中。

第一种方法使一次显示所有仪表板变得更容易,而第二种方法则是逐步加载小部件和分离数据查询的更好方法。