Javascript 尝试使用Node.js传递键值对时出现EJS引用错误

Javascript 尝试使用Node.js传递键值对时出现EJS引用错误,javascript,node.js,ejs,Javascript,Node.js,Ejs,当我使用res.render尝试传递javascript对象(key:value)时,EJS出现了一个奇怪的问题 例如,这很好(有两个单独的app.get请求很好): 但我不希望特色视频出现在单独的页面上。我希望他们在主页上的特色博客文章 但是当我将它们合并到app.get(“/”)请求中时,它会给出EJS引用错误,说“videos”在eval时没有定义(eval在compile 下面是我将它们组合在一起时的样子: app.get("/", function (req, res) { Fea

当我使用res.render尝试传递javascript对象(key:value)时,EJS出现了一个奇怪的问题

例如,这很好(有两个单独的app.get请求很好):

但我不希望特色视频出现在单独的页面上。我希望他们在主页上的特色博客文章

但是当我将它们合并到app.get(“/”)请求中时,它会给出EJS引用错误,说“videos”在eval时没有定义(eval在compile

下面是我将它们组合在一起时的样子:

app.get("/", function (req, res) {
  Featuredblog.find({}, function (err, blogs) {
    if (err) {
      console.log(err);
    } else {
      res.render("home", { blogs: blogs });
    }
  });

  Featuredpost.find({}, function (err, videos) {
    if (err) {
      console.log(err);
    } else {
      res.render("home", { videos: videos });
    }
  });
});
传递“blogs”键值没有问题,只是“videos”键给我带来了麻烦。另外,当我在为else语句调用console.log(“Success”)之后,它会记录“Success”,因此函数可以工作

my home.ejs和featuredvideos.ejs文件都在我的“视图”文件夹中

以下是my home.ejs文件的外观:

<!-- featured blog section -->
<div class="container-fluid">
<h1 class="video-title">Featured Blogs</h1>

    <% blogs.forEach(function(blog) { %>

  <div class="video-container">
    <div class="video">
      <div class="blog-image">
        <img src="/images/<%= blog.image %>">
      </div>
    </div>
    <div class="video video-text">
      <h1> <%= blog.title %> </h1>
      <p>
        <%= blog.content.substring(0, 700) %> ... <mark>Read More.</mark>
      </p>
    </div>
  </div>
  <%  }); %>
</div>


<!-- featured Videos section -->
<div class="container-fluid">
<h1 class="video-title">Featured Videos</h1>

    <% videos.forEach(function(video) { %>

  <div class="video-container">
    <div class="video">
      <div class="embed-responsive embed-responsive-16by9">
      <iframe class="embed-responsive-item" src="<%= video.video %>" allowfullscreen></iframe>
      </div>
    </div>
    <div class="video video-text">
      <h1> <%= video.title %> </h1>
      <p>
        <%= video.content.substring(0, 700) %>  ... <mark>Read More.</mark>
      </p>
    </div>
  </div>
  <%  }); %>
</div> 

特色博客
">

…请阅读更多。

精选视频 …请阅读更多。

这就是我得到的错误:

ReferenceError: /Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/views/home.ejs:47
    45| 
    46| 
 >> 47|     <% videos.forEach(function(video) { %>
    48| 
    49|   <div class="video-container">
    50|     <div class="video">

videos is not defined
    at eval (eval at compile (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:649:12), <anonymous>:26:8)
    at home (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:679:17)
    at tryHandleCache (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:272:36)
    at View.exports.renderFile [as engine] (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:478:10)
    at View.render (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/express/lib/view.js:135:8)
    at tryRender (/Users/Louieg3/Documents/WEB ... etc.
ReferenceError:/Users/Louieg3/Documents/WEB DEVELOPMENT/minduraveledexpress/views/home.ejs:47
45| 
46| 
>> 47|     
48| 
49|   
50|     
视频没有定义
评估时(在编译时评估(/Users/Louieg3/Documents/WEB DEVELOPMENT/minduraveledexpress/node_modules/ejs/lib/ejs:649:12),:26:8)
在家里(/Users/Louieg3/Documents/WEB DEVELOPMENT/mindislaveledexpress/node_modules/ejs/lib/ejs.js:679:17)
在tryHandleCache(/Users/Louieg3/Documents/WEB DEVELOPMENT/minduraveledexpress/node_modules/ejs/lib/ejs:272:36)
在View.exports.renderFile[作为引擎](/Users/Louieg3/Documents/WEB DEVELOPMENT/minduraveledexpress/node_modules/ejs/lib/ejs.js:478:10)
在View.render(/Users/Louieg3/Documents/WEB DEVELOPMENT/minduraveledexpress/node_modules/express/lib/View.js:135:8)
在tryRender(/Users/Louieg3/Documents/WEB…等)。
有什么想法吗?我不知道当它被分解成一个单独的app.get请求时,它为什么会起作用,而不是作为根路由get请求的一部分。我在网上看不到任何关于两个单独的函数导致EJS和Node出现问题的信息


提前感谢,

您似乎同时运行了
res.render(“主页”{blogs:blogs})
res.render(“主页”{videos:videos})
每次请求
/
。由于您的主模板同时需要
博客和
视频,因此每次调用
res.render
时至少会缺少其中一个(此外,我不知道EJS,但我怀疑在一个响应中调用
res.render
两次是无效的。)您只是想进行一次调用,如
res.render(“home”,{blogs:blogs,videos:videos})
?调用render方法两次没有任何好处。只调用第一个render方法。您必须从数据库中获取blog和视频,并调用render一次,如
res.render('index'),{blogs:blogs,videos:videos})
当它只能使用一个res.render时,这是有道理的,但是我如何才能将它们组合起来呢?我不知道如何组合,因为我正在从两个单独的集合调用mode.find()方法。或者如何从两个单独的find()传递返回值's进入同一res.render调用?它们需要留在同一主页下的两个独立部分(一个集合位于h1标题“特色博客”下,另一个位于h1标题“特色视频”)下。@Louieg3您是否正在寻找一种解决方案,将
find
调用一个嵌套在另一个中,如
Featuredblog.find({},function(err,blogs){Featuredpost.find({},function(err,videos){res.render(..)});
?我一直试图以错误的方式嵌套它们。因为它不起作用,我以为你不能嵌套它们。但是因为你提到了嵌套它们会起作用,我又尝试了一次。看起来你好像同时运行了
res.render(“home”)“,{blogs:blogs})
res.render(“home”,{videos:videos})
,每次请求
/
。由于您的主页模板同时需要
blogs
videos
,因此每次调用
res.render
时至少缺少其中一个。(此外,我不知道EJS,但我怀疑在一个响应中调用
res.render
两次从来都不是一件有效的事情。)您只是想调用
res.render(“home”,{blogs:blogs,videos:videos}这样的单个调用吗
?两次调用render方法没有任何好处。只调用第一个render方法。您必须从数据库中获取blog和视频,并使用它们调用render一次,如
res.render('index',{blogs:blogs,videos:videos})
当它只能使用一个res.render时,这是有道理的,但是我如何才能组合它们呢?我不知道如何组合,因为我正在从两个单独的集合调用mode.find()方法。或者我如何传递从两个单独的find()返回的值's进入同一res.render调用?它们需要留在同一主页下的两个独立部分(一个集合位于h1标题“特色博客”下,另一个位于h1标题“特色视频”)下。@Louieg3您是否正在寻找一种解决方案,将
find
调用一个嵌套在另一个中,如
Featuredblog.find({},function(err,blogs){Featuredpost.find({},function(err,videos){res.render(..)});
?我一直试图以错误的方式嵌套它们。因为它不起作用,我以为你不能嵌套它们。但因为你提到嵌套它们会起作用,我又试了一次。
ReferenceError: /Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/views/home.ejs:47
    45| 
    46| 
 >> 47|     <% videos.forEach(function(video) { %>
    48| 
    49|   <div class="video-container">
    50|     <div class="video">

videos is not defined
    at eval (eval at compile (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:649:12), <anonymous>:26:8)
    at home (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:679:17)
    at tryHandleCache (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:272:36)
    at View.exports.renderFile [as engine] (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/ejs/lib/ejs.js:478:10)
    at View.render (/Users/Louieg3/Documents/WEB DEVELOPMENT/mindunravelledexpress/node_modules/express/lib/view.js:135:8)
    at tryRender (/Users/Louieg3/Documents/WEB ... etc.