所以,我已经得到了这个模式:存储在猫鼬
var imageSchema = new Schema({
caption: {type: String, required: true},
url: {type: String, required: true}
});
var EventSchema = new Schema({
name: {type: String, required: true},
date: {type: Date, required: true},
time: {type: String, required: true},
location: {type: String, required: true},
description: { type: String, required: false },
image: {type: String, required: false},
images: [imageSchema]
});
请求是通过locomotive.js处理,并创造新的记录控制器动作看起来是这样的:
EventController.create = function() {
if(preScreen.screen.bind(this)("event", "create")) {
this.elements = modelHelper.loadValues.bind(this)();
this.saveMessage = "Save";
this.strings = strings;
if(this.req.method && this.req.method == "POST")
{
this._createEvent();
} else {
this.render();
}
} else {
this.redirect(this.urlFor({controller: "dashboard", action: "error"}));
}
};
这是一个相当标准的动作控制器;主要是调用一个输入视图,或者当用POST头接收时处理_create。
的_createEvent功能如下:
EventController._createEvent = function() {
if(!(this.elements)) this.elements = require('../templates/Event/elements')();
if(!(this.event)) this.event = new Event();
modelHelper.populate.bind(this)(this.elements, "event", function() {
modelHelper.save.bind(this)("event", this._confirm.bind(this), "create");
}.bind(this));
};
对于我的模型封装了所有的输入在模板模式。与其在这个框架上花费大量时间(我一旦完成小小的调整,我正在开发开源项目),我会说这个模板实际上包含了模式中每个路径的一个元素,并提供了一些客户端这些模板对象的详细信息(错误消息,标签等)由一个相当不可知的modelHelper对象使用。有效地,modelHelper.populate做的是检查元素中每个对象的“type”属性,并为适当的输入类型调用处理程序。
日期类型的处理程序是:
case "date" :
this[record][field.name] = strings.exists(this.param(field)) ?
strings.trim(this.param(field.name)) : null;
break;
虽然我也试过strings.trim(Date.parse(this.param(field.name))从用户字符串获得UTC时间戳。
我已经能够验证用户输入的日期字符串中使用日期语法分析程序中的console.log返回一个有效的UTC时间戳。
当modelHelper.save()调用时运行通过这些模板对象,使用拾取的值创建关联数组从解析器中传递给Record.save()。
其中大部分已经过彻底测试,正在生产中使用,但这是我第一种使用date.now()作为默认值以外的日期的场景。
为了使mongodb/mongoose驱动程序将日期推入日期类型,日期解析器的正确正文是什么?