Как добавить дополнительные свойства для передачи через sequelize объекта в экспресс - PullRequest
0 голосов
/ 17 октября 2018

Так, например, у меня есть следующая модель следования:

// MyModel.js
module.exports = (sequelize, DataTypes) => {
  const MyModel = sequelize.define('MyModel',{
      foo: DataTypes.STRING,
  });

  return MyModel
}

И затем я использую эту модель для выражения шаблонизатора с помощью контроллера следующим образом:

app.get('/foobar',async function(req,res,next){
    var myModel = await MyModel.findById('abcd1234');
    myModel.bar = bar
    return res.render('foobar',{
       myModel: myModel
    });
})

и мой foobar.pug выглядит так:

html
   #{JSON.stringify(myModel)}

Очевидно, я могу найти поле с именем foo, но не могу получить поле с именем bar, как мне передать это дополнительное вычисляемое поле от моего контроллерачерез мою модель?

1 Ответ

0 голосов
/ 17 октября 2018

Причина этого:

var myModel = await MyModel.findById('abcd1234'); 
// will return an instance of MyModel not json

// So you can't just do
myModel.bar = bar;

Чтобы это произошло (преобразование экземпляра в объект JSON)

var myModel = await MyModel.findById('abcd1234').toJSON();
// Now this will return the JSON object and not instance of MyModel 

// Now this will work
myModel.bar = bar;

toJSON () - это метод модели sequelizejs, вы также можете преобразовать его с помощью функции javascript.

Если вы хотите сохранить объект sequelize, сохраните его в другомпеременная

var myModelInstance = await MyModel.findById('abcd1234');

var myModel = myModelInstance.get({plain: true});
// OR
var myModel = myModelInstance.toJSON();

// Now this will work
myModel.bar = bar;

Это возможные способы выполнения, но из-за отсутствия требований и кода это лучшее, что я могу предложить, вы все равно можете заглянуть в GETTER , если вам нужны дополнительные поля внутри экземпляра.

...