2016-12-22 4 views
2

Я определил модель какSequelize JSON типа данных

module.exports = function (sequelize, DataTypes) { 
    const MyModel = sequelize.define('MyModel', { 
    data: { 
     type: DataTypes.JSON, 
     ... 
    }, 
    ... 
    }); 

    return MyModel; 
}; 

я запрос его с помощью

MyModel.findAll().then(myModels => ...); 

Однако data поля в результате запроса является строкой, а не объект JSON. Как это исправить?

+1

Используйте '' JSON.parse (data) '' –

+0

@AkshayKumar Это не то, что, я полагаю, должно быть необходимо. Если тип поля уже JSON, он должен возвращать JSON, а не строку. – MikkoP

+0

@MikkoP, какую базу данных вы используете? – divsingh

ответ

1

Типы данных JSON для MySQL не поддерживаются.

Посмотреть документы здесь http://docs.sequelizejs.com/en/v3/docs/models-definition/#data-types

работа вокруг может быть использование текста и stringify/разобрана при запросе он

+1

Поддержка JSON для MySQL поддерживается Sequelize 4.18 –

3

Это еще MySQL JSON Data Type #4727 не поддерживается. Но вы можете сделать что-то вроде этого:

module.exports = function (sequelize, DataTypes) { 
     const MyModel = sequelize.define('MyModel', { 
     data: { 
      type: Sequelize.TEXT, 
      get: function() { 
       return JSON.parse(this.getDataValue('value')); 
      }, 
      set: function (value) { 
       this.setDataValue('value', JSON.stringify(value)); 
      }, 
    , 
      ... 
     }, 
     ... 
     }); 

     return MyModel; 
}; 

Я также нашел этот пакет на GitHub sequelize-json вы можете дать ему попробовать, если вы не хотите использовать методы получения и установки.