【问题标题】:Date format not displaying in Ejs as it is in backend moment.js日期格式未在 Ejs 中显示,因为它在后端 moment.js 中
【发布时间】:2018-10-02 09:03:20
【问题描述】:

我正在使用创建帖子的后端 POST 请求:

router.post("/", middleware.isLoggedIn, function(req, res) {

var name = req.body.name;
var image = req.body.image;
var description = req.body.description;
var text = req.body.text;
var author = {
    id: req.user._id,
    username: req.user.username
}

var postedTime = req.body.date;
let createdOn = moment(postedTime).format('DD MM YYYY').toString();
console.log(createdOn);

var newPost = {
    name: name,
    image: image,
    description: description,
    text: text,
    author: author,
    createdOn: createdOn
}
spacePost.create(newPost, function(err, newlyCreated) {
    if (err) {
        console.log(err);
    } else {
        res.redirect("/spaceblog")

    }
})

我正在使用 moment.js 来格式化日期,并且控制台看起来很好(2018 年 2 月 10 日)。但是,在将其传递给视图中的 ejs 时,它再次显示为时间戳。

Posted on Sat Oct 02 2018 00:00:00 GMT+0100 (Central Europe Standard Time)

在 EJS 上检索它的代码

<div class="card-footer text-muted">
      Posted on
      <%= post.createdOn  %>
</div>

我读到一个解决方案是使用 moment()。在 EJS 中使用里面的脚本调用它(我也已经在标题中有脚本)。但是,我必须在后端呈现主页(传递 moment 对象)而不是重定向,但我没有找到一种方法来做到这一点,而无需取消创建帖子的 POST 操作。 我在 momentjs.com 中没有找到有用的文档

【问题讨论】:

  • 你使用什么数据库?如何保存新帖子?如何获取模板spaceblog 的帖子数据以及如何将其传输到模板?
  • mongoDB;在函数中使用 .create 时保存新帖子; POST 在 JS 代码中(在上面的描述中更新) .post 正在将帖子传递给模板

标签: node.js momentjs ejs


【解决方案1】:

好的,我现在确实找到了,适用于任何有同样问题的人。如果您使用的是 Nodejs,则无需在视图页面中插入 moment.js 脚本。在后端为您的日期调用 Moment:

let createdOn = moment(postedTime).toString();

然后添加到 app.js(或主路由的其他名称)

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

然后您可以在 EJS 中使用 Moment 调用和格式化:

<%= moment(post.createdOn).format('DD MM YYYY');  %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多