【发布时间】:2013-12-24 09:02:07
【问题描述】:
我希望在一个大型项目中利用 sequelize,并希望可以使用它将 JSON 对象作为属性存储在模型中。
我觉得我正在为此苦苦挣扎,但也许我错过了一些简单的东西?
我正在定义一个模型 (Context),如下所示:
var contextProperties = {
contextName: { type: Sequelize.STRING, validate: { is: ["[a-z]",'i'], notEmpty: true } },
_trackList: {type: Sequelize.TEXT},
trackList: {type: Sequelize.TEXT}
}
var contextGetSet = {
getterMethods: {
trackList: function(){
return JSON.parse(this._trackList);
}
},
setterMethods: {
trackList: function(v){
this._trackList = JSON.stringify(v);
}
}
};
var Context = sequelize.define('Context', contextProperties, contextGetSet);
现在,当我创建我的 Context 时,它似乎在我保存之前就可以工作了。
var contextMain;
Context.create({contextName: "Whatever"}).success(function (context){
contextMain = context;
contextMain.trackList = { atrackList: "1111", anotherTrackList: 2872 };
console.log(constextMain.trackList);
//logs { atrackList: "1111", anotherTrackList: 2872 } as expected
contextMain.save().success(function (contextSaved){
console.log(contextSaved.values);
//all values are null except for the contextName
});
});
所以 JSON 设置正确,但 save().success() 方法返回的对象似乎没有我设置的正确值。
当我记录save().success() 方法(即contextSaved.values)返回的对象时,该对象如下所示:
{ contextName: 'Whatever',
_trackList: 'null',
trackList: null,
id: 6,
createdAt: Fri Dec 06 2013 15:57:39 GMT-0500 (EST),
updatedAt: Fri Dec 06 2013 15:57:39 GMT-0500 (EST)
}
一切都是空的!!
更奇怪的是,当我查看为保存contextMain所做的保存SQL查询时,它似乎正在保存正确!
Executing: UPDATE "Contexts" SET "contextName"='Whatever', "_trackList"='{"atrackList":"1111","anotherTrackList":2872}', "trackList"=NULL,"id"=7, "createdAt"='2013-12-06 20:59:39.278 +00:00', "updatedAt"='2013
-12-06 20:59:39.294 +00:00' WHERE "id"=7 RETURNING *
注意:"_trackList"='{"atrackList":"1111","anotherTrackList":2872}'
另外,当我查看它的实际 SQL 行时,里面确实有字符串化的 JSON 对象!
如果我使用 sequelize 加载上下文...
Context.findAll().success(function(contexts) {
console.log(JSON.stringify(contexts))
// also displays null for _trackList and trackList
});
太奇怪了。非常感谢任何帮助! 非常感谢!抱歉这篇文章太长了!
【问题讨论】:
标签: json node.js sequelize.js