例如,我有一个如下的续集模型:
// 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
的字段,我该如何通过控制器将附加的计算字段通过模型传递给我?
答案 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 实例。