使用sequelize在模型/实例中存储和检索JSON对象
我正在寻求利用一个大项目的续集,并希望我可以用它来存储一个JSON对象作为一个模型中的属性。
我觉得我正在为此而挣扎,但也许我错过了一些简单的东西?
我正在定义一个模型( Context
)如下:
var contextProperties = { contextName: { type: Sequelize.STRING, validate: { is: ["[az]",'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);
现在,当我创build我的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 IS设置正确,但save().success()
方法返回的对象似乎没有我设置的正确值。
当我loggingsave().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行, 它确实有string化的JSON对象在那里 !
如果我使用sequelize加载上下文虽然…
Context.findAll().success(function(contexts) { console.log(JSON.stringify(contexts)) // also displays null for _trackList and trackList });
所以很奇怪。 任何帮助非常感谢! 非常感谢! 对不起,这篇文章太长了!
这显然是一个与对象的getters和setter错误,最近解决: https : //github.com/sequelize/sequelize/issues/759
你能检查运行JSON.stringify的setterMethod是否被调用? 也许它试图插入作为一个对象不是一个string?
更广泛地说,你考虑过MongoDb吗? 也许还有其他的原因,为什么它不吸引你,但从这个项目的一瞥,它看起来会有真正的优势 – 主要不需要parsingJSON在两个方向…但除此之外, d能够使用该对象内的值执行查询之类的事情,稍后可能会有用。
- Node.js Express REST API – 使用GET请求访问JSON url params
- 错误:与multer和body-parser无效的json
- JSON.stringify()只允许一个值参数。 如何添加更多的参数在一个大括号下被串化?
- 如何使用expressJS在Stormpath中获取自定义用户数据?
- JavaScriptlogging对象而不在\ n上执行换行符
- 将一个对象的值和属性合并到另一个对象中
- testingAPI如何使用node.js处理无效的JSON语法请求主体
- Javascript / webpack:如何连接目录中的所有json文件,并使用自定义循环覆盖文件
- 在对象上调用JSON.stringify时,NPM'should'库会导致循环引用错误