插入n:m带有Sequelize的表抛出val.replace错误

时间:2016-12-23 09:20:11

标签: sequelize.js

我有3张桌子定义

export default function(sequelize, DataTypes) {
  return sequelize.define('dict_Lang', {
    _id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    code:{
      type :DataTypes.STRING(10),
      allowNull: false},
    name_en: {
      type: DataTypes.STRING(255),
      allowNull:false},
    pp_id: {
      type: DataTypes.INTEGER,
      allowNull: false},
    active: {
      type: DataTypes.INTEGER,
      allowNull:false,
      defaultValue: 0
    },
  },{
    tableName: 'Langs'
  });
}

export default function(sequelize, DataTypes) {
  return sequelize.define('HtmlValue', {
    _id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true
    },
    categorie_id: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    user_id: {
      type: DataTypes.INTEGER,
      allowNull: true
    },
    ok_oe: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: 0
    },
    ok_iam: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: 0
    },
    ok_export: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: 0
    }
  }
 );
}

export default function(sequelize, DataTypes) {

  return sequelize.define('HtmlLang', {
    titel: {
      type: DataTypes.STRING(300),
      allowNull : true
    },
    text: {
      type: DataTypes.STRING(4000),
      allowNull : true
    }
  }
 );
}

他们是Associated

// Lang n:m Html
db.DictLang.belongsToMany(db.HtmlValue, { through: db.HtmlLang, foreignKey:'lang_id',otherKey:'html_id'});
db.HtmlValue.belongsToMany(db.DictLang, { through: db.HtmlLang, foreignKey: 'html_id',otherKey: 'lang_id'});

现在我想在创建新的HtmlLang

后在HtmlValue表中插入一个新行
// Creates a new HtmlValue in the DB
export function create(req, res) {
  console.log(req.body.defaultDE);
  return HtmlValue.create(req.body)
  .then((html)=>{
    console.log(HtmlValue.Instance.prototype);
    return html.addDict_Lang(req.body.defaultDE);
  })
    .then(respondWithResult(res, 201))
    .catch(handleError(res));
}

HtmlValue创建正常,然后抛出val.replace Error...

    console.log(req.body.defaultDE); shows me { titel: 'test', text:'test2': lang_id : 73}
and
console.log(HtmlValue.Instance.prototype); shows me 
{....
 getDict_Langs: [Function],
 countDict_Langs: [Function],
 hasDict_Langs: [Function],
 hasDict_Lang: [Function],
 setDict_Langs: [Function],
 addDict_Lang: [Function],
 addDict_Langs: [Function],
 removeDict_Lang: [Function],
 removeDict_Langs: [Function],
 createDict_Lang: [Function] }

因此发送数据格式正确且功能存在并且是关联的?哪里可能是错误/错误?

EDIT1: 根据要求输出req.body

{ user_id: 2,
  categorie_id: '1',
  defaultDE: { titel: 'Test', text: 'Test2', lang_id: 73 },
  defaultEN: { titel: 'Test', text: 'Test3', lang_id: 75 } }

它创建HtmlValue没有错误,它在数据库中。 在我的表Langs中也存在lang_id : 73。 所以

html.addDict_Lang(req.body.defaultDE);

我想在n:m表中插入。 html保存html_id并在req.body.defaultDE中发送必要的文本(字符串),标题(字符串),lang_id(73< - 存在于Lang表中)。

Edit2 对于评论..not Plain Objects 我有点使用其他地方相同的结构。 简而言之

// Tasks n:m Keys Association
db.DictKey.belongsToMany(db.Task, { through: db.TaskKey, foreignKey:'key_id',otherKey:'task_id'});
db.Task.belongsToMany(db.DictKey, { through: db.TaskKey, foreignKey: 'task_id',otherKey: 'key_id'});

使用addAssiciation与普通对象

进行相同的操作
  .then((task) => {
      var groups = [];
      var size = 1000;
      for (var i = 0; i < req.body.keys.length; i += size) {
        groups.push(req.body.keys.slice(i, i + size));
      }
      _.forEach(groups, (value) => {
        return task.addDict_Keys(value);
      })
      return Task.findAll();
    })

而Value将是一个简单的对象,如

{ titel: 'Hello', text: 'Buenos Nachos', lang_id: 73, user_id : 2 }

那么普通物体是有效还是我理解它错了?

0 个答案:

没有答案