nodejs和mongoose的时间戳

时间:2014-02-21 17:03:12

标签: javascript node.js time mongoose momentjs

我现在正在学习nodeJS,所以我做了这个教程(http://scotch.io/tutorials/javascript/creating-a-single-page-todo-app-with-node-and-angular),现在我想为每个待办事项添加时间戳。

我使用moment.js

创建一个简单文件(time.js)
var moment = require('moment');
moment().format();
var mytime = moment().format('MMMM Do YYYY, h:mm:ss a');

module.exports = {
time : mytime
}

并将其连接到我的路线文件

var qtime = require('./time');
app.post('/api/todos', function(req, res) {
...
Todo.create({
....
time : qtime.time}
....

这里我得到了我的服务器启动时间,而不是我发布的时间(这就是我需要的)

这里出了

"time": "February 21st 2014, 12:00:40 pm",
"time": "February 21st 2014, 12:00:40 pm",
"time": "February 21st 2014, 12:00:40 pm",
...

如何获得每个请求的当前时间?

2 个答案:

答案 0 :(得分:2)

有一个mongoose模式为您处理默认值的函数。这些默认值可以计算出来。在这个例子中,实现你在这里要求的正确和简单的方法如下

new Schema({
    date: { type: Date, default: Date.now }
})

当您保存对象时,您不再需要指定“日期”字段,mongoose会照顾它!

Mongoose Docs:http://mongoosejs.com/docs/2.7.x/docs/defaults.html(旧) http://mongoosejs.com/docs/schematypes.html(当前版本)

答案 1 :(得分:0)

为什么要完成所有额外的工作,而不是将模式中的时间字段定义为Date类型并使用中间件来设置?

var todoSchema = mongoose.Schema({
  time: Date
});

todoSchema.pre('save', function (next) {
  if (!this.isNew) next();
  this.time = new Date();
  next();
});