【问题标题】:Displaying Dates from MongoDB with Express.js [closed]使用 Express.js 显示来自 MongoDB 的日期 [关闭]
【发布时间】:2012-06-08 08:54:15
【问题描述】:

我使用 mongoose.js 将一些数据集保存到 MongoDB。但我在使用 express.js 和 ejs 的 html 网站上显示它们时遇到了问题。

这是我的场景:

型号

var mongoose = require('mongoose');

var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var ItemSchema = new Schema({
    _id: ObjectId,
    creationTime: Date,
    modificationTime: Date,
    title: String
});
var Item = mongoose.model('item', ItemSchema);
module.exports.Item = Item;

路线:

app.get('/item/:id', function(req, res) {

    Item.findById(req.params.id, function(err, doc){

        console.log(doc); //This check displays everything correctly on console

        res.render('item.html.ejs', {
            item : doc
        });
    });
});

查看:

<h1><%= item.title %>:</h1>
<p>Creation: <%= item.creationDate %></p>
<p>Modification: <%= item.modificationDate %></p>

此设置的结果是标题显示正确,而两个日期均为undefined。

我认为这与 MongoDB 的 ISODate 格式有关。但我找不到关于如何将其转换为在 html 视图中显示的解决方案。

感谢您的帮助。干杯

【问题讨论】:

  • 我不认为这与 MongoDB 的日期格式有关,但如果您愿意,可以使用 moment.js 将其转换为更易读的格式
  • 可以在node中使用moment.js。
  • 认真的吗?我对这个问题投了反对票?这是什么?红迪网?

标签: node.js mongodb express mongoose ejs


【解决方案1】:

我使用上面的示例添加了一个 ejs 过滤器,但我必须对其进行一些更改才能使其正常工作:

在 mongoose 架构上创建 'created_at' 属性并在 save() 上自动创建它:

var ItemSchema = new Schema({
    name    : { type: String, required: true, trim: true }
  , created_at    : { type: Date }
});


ItemSchema.pre('save', function(next){
  if ( !this.created_at ) {
    this.created_at = new Date;
  }
  next();
});

安装时刻(并写入 package.json)

npm install moment --save

在 app.js 或您为 ejs 定义过滤器的任何其他位置添加过滤器:

var moment = require('moment');

ejs.filters.fromNow = function(date){
  return moment(date).fromNow()
}

使用 page.ejs 中的过滤器

<span class="created_at"><%=: item.created_at | fromNow %></span>

【讨论】:

    【解决方案2】:

    如果你只是复制粘贴代码,解决方法非常简单。

    在您的模型中,您在模板中定义了 creationTime 和 modifyTime,您尝试访问 item.creationDate 和 item.modificationDate。

    更改后,您应该能够看到未定义的其他内容,但您可能仍需要将其转换为正确的日期格式。

    【讨论】:

    • 生活中有时你会问自己是否完全智障 -.- 非常感谢 :-)
    【解决方案3】:

    我的项目中有以下使用 moment.js 的助手。

    date: function(date){
      moment(date).format('YYYY-MM-DD hh:mm:ss');
    },
    fromNow: function(date){
      moment(date).fromNow()
    }
    

    【讨论】:

    • 感谢您的提示。这是一个非常好的帮手:-)
    • 不错的一个。感谢您的提示!
    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多