Добавьте свойство к объекту, возвращаемому Sequelize FindOne

Я пытаюсь добавить свойство в экземпляр sequelize перед передачей его обратно клиенту.

router.get('/cats/1', function (req, res) {
    Cat.findOne({where: {id: 1}})
        .then(function (cat) {
            // cat exists and looks like {id: 1}
            cat.name = "Lincoln";
            // console.log of cat is {id: 1, name: Lincoln}
            res.json(cat);
        });
});

клиент видит только {id: 1} и не только что добавленный ключ.

  • что здесь происходит?
  • какой тип объекта возвращается Sequelize?
  • как я могу добавить новые свойства к моим кошкам и отправить их обратно?

1 ответов


В Sequelize Model класс (из которых ваши кошки являются экземплярами) имеет toJSON() метод РЭС.JSON будет, вероятно, использовать, чтобы serialise вашей кошки. Метод возвращает результат Model#get() (https://github.com/sequelize/sequelize/blob/95adb78a03c16ebdc1e62e80983d1d6a204eed80/lib/model.js#L3610-L3613), который использует только атрибуты, определенные в модели. Если вы хотите установить имя кошки, но не хранить имена в БД, вы можете использовать виртуальный столбец при определении модель кошки:

sequelize.define('Cat', {
  // [other columns here...]
  name: Sequelize.VIRTUAL
});

кроме того, если вы не хотите добавлять свойства в определение модели:

cat = cat.toJSON(); // actually returns a plain object, not a JSON string
cat.name = 'Macavity';
res.json(cat);