Node.js 使用Express.js显示MongoDB中的日期

Node.js 使用Express.js显示MongoDB中的日期,node.js,mongodb,express,mongoose,ejs,Node.js,Mongodb,Express,Mongoose,Ejs,我使用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: D

我使用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>
查看:

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>
:
创建:

修改:

此设置的结果是,当两个日期都未定义时,标题显示正确

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


我感谢你的帮助。干杯

我有以下助手在我的项目中使用矩.js

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

如果您只是复制并粘贴代码,那么解决方案非常简单

在您的模型中,您在模板中定义了创建
Time
和修改
Time
,您尝试访问item.creation
Date
和item.modification
Date


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

我使用上述示例添加了一个ejs筛选器,但我必须对其进行一些更改以使其正常工作:

在mongoose架构上创建“created_at”属性,并在保存()时自动创建它:

安装矩(并写入package.json)

在app.js或您为EJB定义过滤器的任何地方添加过滤器:

var moment = require('moment');

ejs.filters.fromNow = function(date){
  return moment(date).fromNow()
}
使用page.ejs中的过滤器

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


我认为这与MongoDB的日期格式无关,但如果您希望将其转换为更可读的格式,可以在node中使用矩.js。真的吗?我在这个问题上被否决了?这是什么?Reddit?有时候在生活中你会问自己你是否完全智障。-非常感谢:-)谢谢你的提示。这是一个很好的助手:-)很好的一个。谢谢你的提示!