express - 如何在express中添加要通过sequelize对象传递的其他属性
问题描述
因此,例如,我有一个续集模型,如下所示:
// 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
,我如何通过我的模型从我的控制器传递这个额外的计算字段?
解决方案
这背后的原因是:
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 。
推荐阅读
- google-apps-script - 谷歌表格应用脚本更改工作表并保持相同的活动单元格
- postgresql - PostgreSQL Bytea 列作为 varchar 结果
- java - Apache commons MultiValuedMap 和 Jackson
- javascript - JS 简单的商店商品过滤器
- asp.net-core-webapi - Swagger UI 中的空响应描述和错误的访问控制允许方法 (Swashbuckle.AspNetCore 5.5.1 +)
- c++ - 当我包含 Qt QThread 和 PostgreSQL libpq-fe 头文件时,为什么会出现编译器错误?
- single-sign-on - 处理 Keycloak 错误“无法处理来自 SAML 身份提供者的响应”
- java - 在 Kotlin 中,第二次调用 joinToString 比第一次调用快
- python - Pyspark 列表列作为 json 文档中的键值对出现
- visual-studio - CMake - usd_from_gltf - 错误无法加载缓存