【问题标题】:How to run moment.js in pug templates?如何在 pug 模板中运行 moment.js?
【发布时间】:2018-10-04 08:39:32
【问题描述】:

我有一个控件,它将呈现带有对象数组的哈巴狗模板。

res.render('template.pug', {objects: objects}); 

在模板中,我将遍历数组并将日期修改为local date/time. 我想调用moment 函数来实现这一点。

是否可以在 pug 模板中调用 moment 函数?还是有更好的解决方案?

【问题讨论】:

  • 你为什么不愿意在控制器中循环?那将是进行这种转换的最有效的地方。
  • 其他 - 当您在服务器上运行时刻时,您将获得服务器而不是客户端的本地时间。您要么需要从客户端传入时区偏移量,要么将数据发送到客户端进行处理。

标签: node.js pug momentjs


【解决方案1】:

在您的 app.js(或 server.js 或任何启动您的节点应用程序)中添加以下行:

app.locals.moment = require('moment');

这将使您在所有哈巴狗模板中都可以使用 moment 的时刻。当然,还要确保你已经运行 npm install moment --save 将它添加到你的 package.json 并下载包。

【讨论】:

  • 谢谢你,格雷厄姆。这非常简单易行。
【解决方案2】:

您可以像这样在现有的objects 数组中导入/传递moment.js 库,

var objects= {
  someExitingKey1: 'Some value 1',
  someExitingKey2: 'Some value 2',
  ........,
  ........,
  ........,
  moment: require('moment')
};

在您的template.pug 中,您可以使用矩库函数,例如,

doctype html
html
  head
    title= title
  body
    span= moment(someDateValue).format('YYYY-MM-DD')

希望这会有所帮助!

【讨论】:

  • 嗨大卫,感谢您的回复。对象是从 MongoDB 数据库中检索的。我怎样才能有效地将“时刻:需要(‘时刻’)”嵌入到每个对象中?我不愿意在控制器中循环。有什么建议吗?
  • 不,不是在每个对象中。你应该像这样res.render('template.pug', {objects: objects, moment: require('moment')}); 传递moment 或者更好地使用CDN 将moment 导入到你的pug/html 文件中,然后简单地使用moment
  • @zerosand1s 是的,这样做是恰当的。
  • 谢谢大卫和 Zerosand1s。我决定使用 Graham 提供的 app.locals.moment,因为我没有对控制器进行太多更改。
猜你喜欢
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2020-10-01
  • 1970-01-01
相关资源
最近更新 更多