【问题标题】:Mongoose + CoffeeScript 'default' property - Getting it to work?Mongoose + CoffeeScript 'default' 属性 - 让它工作?
【发布时间】:2014-03-15 02:06:25
【问题描述】:

如您所知,MongooseJS 有一个可用的“默认”属性。例如,如果我想要我的对象上的 Date 属性,并且我希望该日期自动默认为创建记录的时间,我将在架构中将其定义为:

var myObject = mongoose.Schema({
  date: {type: Date, default: Date.now}
});

现在,在 CoffeeScript 中这样做的问题是 default 是 JavaScript 中的保留关键字,所以 CoffeeScript 编译器会自动将 default 用双引号括起来,所以这个 CoffeeScript 代码:

myObject = mongoose.Schema
    date:
        type: Date
        default: Date.now

编译为:

var myObject;
myObject = mongoose.Schema({
    date: {type: Date, "default": Date.now}
});

这会导致default 参数无法按预期工作。也许我错过了一些东西,但我尝试过的一切都不起作用。保存记录时我不需要手动设置日期,因为 default 关键字已经提供了此功能。

有谁知道如何解决这个问题?

【问题讨论】:

  • 将该密钥作为"default": 而不是default: 就可以了,并且不会阻止它工作。这里发生了其他事情。
  • 你能给我指出一些解释吗?我已经将 CoffeeScript 编译为 JS 并手动删除了 default 属性周围的双引号,它似乎可以工作。
  • 我实际上将这些引号添加到我的 default Mongoose 模式中的键中,以使我的编辑器的 JS linter 满意,所以我知道它有效。更一般地说,这里有一个SO question,关于带引号和不带引号的键。只有少数边缘情况不同。

标签: node.js coffeescript mongoose


【解决方案1】:

我不得不承认我讨厌 CoffeeScript 之类的东西,但你可能可以通过这样做来解决这个问题:

var schema = {
   type: Date
};

schema["default"] = Date.now;

myObject = mongoose.Schema(schema);

【讨论】:

  • 这看起来很有趣并且有效,但我对 JohnnyK 对我的问题的评论非常好奇 - 在我接受答案之前等待进一步的输入。
【解决方案2】:

所以,我的问题的解决方案相当简单,而且是一个菜鸟错误:我忘记在 myObject.find() 中指定要返回的 Date 属性...

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 2013-01-30
    • 2015-06-14
    • 1970-01-01
    • 2017-08-26
    • 2011-04-10
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    相关资源
    最近更新 更多