Node.js 如何在视图节点内显示视图。js

Node.js 如何在视图节点内显示视图。js,node.js,express,ejs,Node.js,Express,Ejs,我的仪表板有一个视图、路线和控制器。我还为小部件提供了一个路由、视图和控制器。在仪表板上,我想显示这些小部件。如果我去的话,我可以看到数据从数据库中提取出来,而且一切正常。但是,在我的仪表板视图中,如果我尝试将其包括在内,如: <%- include('../widget/widget.ejs') %> 控件控制器: const Product = require("../models/product"); exports.getIndex = (req, res, next)

我的仪表板有一个视图、路线和控制器。我还为小部件提供了一个路由、视图和控制器。在仪表板上,我想显示这些小部件。如果我去的话,我可以看到数据从数据库中提取出来,而且一切正常。但是,在我的仪表板视图中,如果我尝试将其包括在内,如:

<%- include('../widget/widget.ejs') %>
控件控制器:

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>
            <% } %>
仪表板控制器包含大量代码,因此我刚刚将其简化为最简单的形式

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);
    });

对,所以您看到的问题是,在小部件路由中,您从数据库中提取数据,然后将其呈现给组件ejs。在dashboard视图中,
include
指令只呈现来自ejs模板的HTML,没有要填充的数据

你有几种选择。最简单的方法(虽然可能不是最有效的)可能是在仪表板中执行相同的DB查询,然后在发送到视图的本地对象中包含相关数据

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


第一种方法使一次呈现所有仪表板变得更容易,而第二种方法是渐进加载小部件和分离数据查询的更好方法

如果
小部件
视图从数据库中提取一些数据,那么您可以发出ajax请求,而不是普通的http请求。然后你可以在脚本中包含EJS视图(ajax请求是在这里完成的)。你能显示服务于/widget和仪表板的代码吗?@Paul,不确定我是否已经给出了你现在想要的内容,但如果没有,请告诉我(我编辑了原始问题)
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);
    });