【问题标题】:Using Node.js to render data in pug - no data on rendered page使用 Node.js 在 pug 中渲染数据 - 渲染页面上没有数据
【发布时间】:2019-04-06 06:26:32
【问题描述】:

我正在尝试使用 res.render() 将数据传递给 Pug 模板。当我在代码中达到这一点时:

const _renderPage = function(req, res, responseBody) {  
console.log(responseBody);
res.render('page-template', {  
    pageData: responseBody,
    pageTitle: 'this is the about page!' }
    ); 
};

console.log(responseBody) 显示:

[  { _id: '5bda4cfc11922d1dc5961922',
    name: 'about',
    body: 'about ksdjflskjflksdfks' }  ]

但是,我的 Pug 模板如下所示,不会打印 pageData.name 或 pageData.body 的实际值,即使它确实打印了 pageTitle 变量:

h1= pageTitle
p Welcome to #{pageData.name}

.row
  .col-12
    p #{pageData.body}

【问题讨论】:

  • 您是否尝试过只破坏您想要的内容,完全删除pageData 变量? js res.render('page-template', { {...responseBody}, pageTitle: 'this is the about page!' } ); }; pug h1= pageTitle p Welcome to #{name} .row .col-12 p= body
  • 关于问题标题的 304 部分 - 从技术上讲,这不是错误(4XX 是错误,3XX 是重定向),但是在重新加载页面时该响应是有意义的,并且没有任何改变。如果你真的有兴趣,看看这个:stackoverflow.com/questions/26166433/…

标签: node.js json pug


【解决方案1】:

您的根本问题是 responseBody 是一个数组,而您正试图将其作为对象访问。

更改渲染函数以将数组中的第一个元素提供给模板,它将按预期工作:

res.render('page-template', {  
  pageData: responseBody[0],
  pageTitle: 'this is the about page!' }
); 

【讨论】:

  • 谢谢你,成功了。我复制了用于使用“每个 x”对不同模板中的数据库项数组进行操作的代码,并且没有正确调整它以返回仅包含一项的数组。我认为我可以进一步改进我的 API 代码(未显示)以使用 findOne() 而不是 find(),这样会更有意义。
  • 当然没那么简单 :) 请先阅读:blog.serverdensity.com/…
  • 最简单(因此也是运行速度最快)的解决方案就是获取数组的第一个元素。如果数组返回为零长度,请确保您的错误处理可以选择并适当地处理它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
相关资源
最近更新 更多