Node.js 尝试从mongodb格式化日期时出现的问题

Node.js 尝试从mongodb格式化日期时出现的问题,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我正在尝试在显示模型之前对其设置日期类型属性的格式。这是我正在使用的代码: // MODEL var mongoose = require('mongoose'), Schema = mongoose.Schema; var ArticleSchema = new Schema({ title: String, content: String, author: { type: String, default: 'Vlad'}, postDate: { t

我正在尝试在显示模型之前对其设置日期类型属性的格式。这是我正在使用的代码:

// MODEL
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var ArticleSchema = new Schema({
    title: String,
    content: String,
    author: { type: String, default: 'Vlad'},
    postDate: { type: Date, default: Date.now }
});

ArticleSchema.methods.formatTitle = function() {
    var link = this.title.replace(/\s/g, '-');
    return '/article/' + link;
};

ArticleSchema.methods.snapshot = function() {
    var snapshot = this.content.substring(0, 500);
    return snapshot;
};

ArticleSchema.methods.dateString = function() {
    var date = new Date(this.postDate);
    return date.toDateString();
};

module.exports = mongoose.model('Article', ArticleSchema);
在客户端,我尝试使用以下方式显示格式化日期:

{{ article.dateString }}
不过,无论何时加载包含此元素的视图,都会出现500错误:

Cannot call method 'toDateString' of undefined
EDIT1:我在视图中嵌入{{article.snapshot}}没有问题,但是当涉及到Date对象时,我得到了一个错误

EDIT2:使用console.log(article.dateString())记录dateString方法时,我得到以下信息:

Wed Sep 18 2013
EDIT3:这是我在使用dankohn提供的代码时得到的。只是我,还是只是连续两次运行该方法

this.postdate: Wed Sep 18 2013 23:27:02 GMT+0300 (EEST)
parsed: 1379536022000
date: Wed Sep 18 2013 23:27:02 GMT+0300 (EEST)
toString: Wed Sep 18 2013
Wed Sep 18 2013
this.postdate: undefined
parsed: NaN
date: Invalid Date
toString: Invalid Date

我重写了这篇文章,以明确你的约会内容失败的地方:

ArticleSchema.methods.dateString = 
  console.log('this.PostDate: ' + this.postDate)
  var parsed = Date.parse(this.postDate)
  console.log('parsed: ' + parsed)
  var date = new Date(parsed);
  console.log('date: ' + date)
  var toString = date.toDateString();
  comsole.log('toString: ' + toString)
  return toString;
};

另外,如果这对您不起作用,我建议使用这个库,它比原生Javascript日期更容易使用。

我重写了这个库,以清楚地说明您的日期内容失败的地方:

ArticleSchema.methods.dateString = 
  console.log('this.PostDate: ' + this.postDate)
  var parsed = Date.parse(this.postDate)
  console.log('parsed: ' + parsed)
  var date = new Date(parsed);
  console.log('date: ' + date)
  var toString = date.toDateString();
  comsole.log('toString: ' + toString)
  return toString;
};

另外,如果这对您不起作用,我建议使用比本机Javascript日期更容易使用的库。

您的Mongoose模型实例方法只能在服务器端使用,而不能在客户端使用。那么我怎么可以在我的Handlebar视图中使用{article.snapshot}来获取快照呢?…请尝试Date.now()带括号?我不想把当前的日期和时间放进去;我想取消约会mongodb@ZeMoon当时我没能解决这个问题。我最终使用了MongoDB默认使用的格式,并在前端使用MomentJS等模块对其进行解析。您的Mongoose模型实例方法只能在服务器端使用,而不能在客户端使用。那么,我怎么可以在我的Handlebar视图中使用{article.snapshot}并获取快照呢?…请尝试Date.now()带括号?我不想把当前的日期和时间放进去;我想取消约会mongodb@ZeMoon当时我没能解决这个问题。我最终使用了MongoDB默认使用的格式,并在前端用MomentJS等模块对其进行解析。这是我第一次尝试的方式,但失败了。你知道为什么它不起作用吗?我的意思是,将快照带到视图中没有问题,但它根本不会格式化MongoDB日期字段。您认为这与mongo以ISO格式存储日期对象有关吗?我要去看看那个图书馆!谢谢你的提示!试过了,我再也没有收到500的回复了。但在视图中,我得到以下字符串:“无效日期”。因此,该方法现在返回以下字符串:)使用console.log显示this.postDate是什么,并用它更新您的问题。另外,我建议使用Chrome:Dev Tools:Console来尝试使用何种日期命令组合来解析输入,将其转换为日期对象,然后以您需要的字符串格式输出。我已使用Console.log()结果更新了我的帖子(EDIT2)。请检查我的更新!还有,非常感谢你帮助我!:)这就是我第一次尝试的方式,但失败了。你知道为什么它不起作用吗?我的意思是,将快照带到视图中没有问题,但它根本不会格式化MongoDB日期字段。您认为这与mongo以ISO格式存储日期对象有关吗?我要去看看那个图书馆!谢谢你的提示!试过了,我再也没有收到500的回复了。但在视图中,我得到以下字符串:“无效日期”。因此,该方法现在返回以下字符串:)使用console.log显示this.postDate是什么,并用它更新您的问题。另外,我建议使用Chrome:Dev Tools:Console来尝试使用何种日期命令组合来解析输入,将其转换为日期对象,然后以您需要的字符串格式输出。我已使用Console.log()结果更新了我的帖子(EDIT2)。请检查我的更新!还有,非常感谢你帮助我!:)