如何添加其他属性以通过Express中的sequelize对象传递

时间:2018-10-17 09:07:05

标签: express pug sequelize.js

例如,我有一个如下的续集模型:

// 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 :(得分:1)

这背后的原因是:

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函数将其转换。

如果要保留序列对象,请将其保留在其他变量中

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   实例。