简体   繁体   English

EJS 没有对给定 object 的所有属性进行模板化

[英]EJS not templating all properties from given object

So I am trying to template a JSON object to an ejs view.因此,我正在尝试将 JSON object 模板化为 ejs 视图。 However, only some of the properties from the given object are being templated onto the view.但是,只有来自给定 object 的一些属性被模板化到视图中。 When I run my website on localhost, it works fine, but when I run it on my VPS where the same code is deployed, it doesn't work.当我在本地主机上运行我的网站时,它工作正常,但是当我在部署相同代码的 VPS 上运行它时,它就不起作用了。

Here's what the object looks like:这是 object 的样子:

{
    "_id" : ObjectId("5e5d9492bbb5f314b03a07b5"),
    "date" : "Mon Mar 02 2020",
    "author" : "hello",
    "title" : "Fake Blog Post on How to Rig a Rod",
    "content" : "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque lacinia viverra ultricies. Duis vel dui ante. Nulla venenatis ornare lorem et ornare. Phasellus vestibulum viverra diam quis pulvinar. Curabitur sit amet ultricies purus. Donec a pretium justo. Mauris pharetra, nisl ac vehicula pulvinar, diam sapien fringilla enim, auctor eleifend lorem justo et turpis. Nam eget tristique velit. Sed gravida sapien sed nisl sodales, eget scelerisque arcu tristique. Phasellus molestie neque in suscipit pulvinar. Nunc nec lectus quis lorem consequat accumsan. Praesent nec odio placerat, bibendum dolor sit amet, rhoncus quam. Donec et lacus eu felis sollicitudin porttitor. Cras nec aliquet neque. Donec erat risus, porttitor ac pharetra sit amet, mattis vel est. Morbi vel malesuada tellus. Proin non congue purus, vitae dapibus lacus. Curabitur lacinia urna vel sapien euismod rutrum. Pellentesque feugiat orci a mi consectetur suscipit. Duis sed eros at dui facilisis dictum. Cras enim turpis, imperdiet vel lacus id, pulvinar rhoncus risus. Donec molestie turpis ipsum, ac ullamcorper orci pharetra non. Pellentesque ut quam congue, feugiat nisl vel, sagittis ipsum. Pellentesque facilisis tempor tristique. Mauris condimentum egestas lectus a luctus. Proin eget ullamcorper ligula. Sed semper quis est ac condimentum. Vivamus sed velit dolor. Sed aliquam sollicitudin orci a pretium. Nulla quis sem vel turpis facilisis bibendum quis vel tellus. In hac habitasse platea dictumst. Sed feugiat vestibulum condimentum. Morbi sit amet pharetra orci. Etiam accumsan elit eu erat eleifend pulvinar. Vestibulum blandit gravida scelerisque.Proin non ex lobortis, suscipit purus tristique, blandit metus. Vivamus sit amet mi at lectus gravida luctus sed eget purus. Donec laoreet nec nulla quis sagittis. Cras ut eros efficitur, dictum felis vitae, cursus tortor. Sed varius ante non sapien malesuada, vitae tempor orci tincidunt. In lacus risus, efficitur ut erat vel, lacinia vulputate velit. Sed orci ligula, venenatis sed nisi id, varius scelerisque diam. In ut volutpat ligula, nec sodales sem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In fermentum ac neque non suscipit. Cras aliquam, eros sed molestie lacinia, dolor dui suscipit purus, ac maximus quam leo a magna. Mauris sed ipsum a magna hendrerit interdum at non erat. Sed blandit elementum libero quis placerat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur semper auctor augue vel laoreet. Aliquam ac interdum dui, ullamcorper malesuada justo. Proin non efficitur lectus. Nam quam arcu, laoreet in volutpat non, condimentum vulputate nulla. Phasellus sit amet tellus facilisis odio dignissim maximus. Proin accumsan volutpat nunc, id pulvinar mi consequat ut. Pellentesque nec congue libero. Cras mauris nisl, pharetra sit amet semper ut, sodales quis urna. Aenean mollis quam felis, id cursus nunc pulvinar sed. Sed a urna pharetra, hendrerit massa ac, sodales urna. Pellentesque nec congue mi, in condimentum mi. Aliquam lacinia lacus at venenatis ultricies.",
    "__v" : 0
}

Here's what the ejs file looks like:这是 ejs 文件的样子:

<!DOCTYPE html>
<html>

<head>
  <title>Rig Guides</title>
  <%- include ('partials/product_head') %>
</head>

<body>

  <!-- ========= NAV BAR ============= -->
  <%- include ('partials/navbar') %>
  <div id="build-title" class=" py-5">
    <h6 class="text-center dark-blue text-uppercase">Rig Guide</h6>
    <h3 class="text-center bold-font"><%= post.title %></h3>
    <h5 class="text-center">By <%= post.author %></h5>
  </div>
  <div class="container-fluid guide-container">
    <div class="row justify-content-center">
      <div class="col-xl-6 col-lg-8 col-md-8">
        <p class="guide-content my-5 py-2"><%= post.content %></p>
      </div>
    </div>
  </div>


  <%- include ('partials/footer') %>
  <script src="js/guide.js"></script>
</body>

</html>

and here's the output on my deployed website at rodrigger.com image of website这是我在rodrigger部署的网站上的output。网站的com图像

As you can see, the title and content values are templated onto the page, but the value for the property "author" is not templated b/c it should say "By [Author]"如您所见,标题和内容值被模板化到页面上,但属性“作者”的值没有被模板化 b/c 它应该说“由 [作者]”

Apparently, the issue had to do with the DB and the data being retrieved from it.显然,问题与数据库和从中检索的数据有关。

I used this call to get the data from the DB:我使用此调用从数据库中获取数据:

 var data = await Guide.find({
    title: req.params.title
  }).exec();

I added this line just in case there was some "defect" in the data if that's what you'd call it.我添加了这一行,以防万一数据中有一些“缺陷”,如果这就是你所说的。

data = JSON.parse(JSON.stringify(data)):

and sure enough, EJS was able to correctly template the data.果然,EJS 能够正确地模板化数据。 Then I realized.find() in mongoose returns the actual Mongoose Document and not a Javascript Object which is probably why EJS couldn't template the data. Then I realized.find() in mongoose returns the actual Mongoose Document and not a Javascript Object which is probably why EJS couldn't template the data. So I then used.lean() and it solved my issue.所以我然后使用了.lean() 它解决了我的问题。

var data = await Guide.find({
    title: req.params.title
  }).lean().exec();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM