json - 使用 sequelize 在模型/实例中存储和检索 JSON 对象

标签 json node.js sequelize.js

我希望在一个大项目中利用 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
});

太奇怪了。非常感谢任何帮助! 非常感谢!抱歉这篇文章太长了!

最佳答案

这显然是对象的 getter 和 setter 的错误,最近已解决: https://github.com/sequelize/sequelize/issues/759

关于json - 使用 sequelize 在模型/实例中存储和检索 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433592/

相关文章:

node.js - 在 npm @google-cloud/speech 中使用 API key

node.js - Azure 上的 Strapi 无法运行

javascript - Sequelize findOne错误: TypeError indexOf undefined

jquery - Ajax 邮政 : "Server encountered an error processing the request"

javascript - 重命名嵌套 JSON 数据集不同级别的变量

jquery - 在 jQuery 中,我在 JSON 结果中返回 HTML,我必须转义什么?

javascript - 带有node-mysql输出到数组的异步系列

node.js - 如何使用 Sequelize 填充树

mysql - 如何在sequelize模型中获取继承

java - 格式化 Mysql JSON 与在后端重新格式化为 JSON