Mongoose无法正常工作(SchemaType#get(fn))

时间:2015-10-18 10:20:50

标签: node.js mongodb mongoose

我正在查看mongoose的API文档,并找到了get选项。但似乎对我不起作用。

这是带有get选项的Schema:

var PostSchema = new Schema({
  content: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now,
    get: function (val) {
      return (val.getMonth() + 1) + "/" + val.getDate() + "/" + val.getFullYear() + " " + (val.getHours() + 1) + ":" + (val.getMinutes() + 1) + ":" + (val.getSeconds() + 1);
    }
  }
})

这是我获取所有文件的地方:

var Post = App.model('post')
exports.fetchAll = function (req, res, next) {
  Post.find({}).sort({date: 'desc'}).exec(function (err, posts) {
    if (err) { return next(err) }
    res.json(posts)
  })
}

但结果仍然相同。在客户端,我收到{{post.date}}的非格式化字符串:

2015-10-18T07:56:24.606Z

我无法弄清楚为什么格式化的日期字符串不会被返回。

1 个答案:

答案 0 :(得分:2)

通过向架构添加getters: true选项,可以告诉mongoose在将文档转换为JSON时使用getter。 Mongoose使这个选项成为一个选项,因为在将文档转换为对象(保留原始日期对象)或JSON(格式化日期字符串)时,您可能想要或不想有不同的逻辑:

var PostSchema = new Schema({
  content: {
    type: String,
    required: true
  },
  date: {
    type: Date,
    default: Date.now,
    get: function (val) {
      return (val.getMonth() + 1) + "/" + val.getDate() + "/" + val.getFullYear() + " " + (val.getHours() + 1) + ":" + (val.getMinutes() + 1) + ":" + (val.getSeconds() + 1);
    }
  }
},
{
    toJSON: {
        getters: true
    }
})