javascript - 从不在类中的对象中删除属性
问题描述
我正在使用 adonisjs,并试图清理服务器上的发布请求。我返回的数据具有未映射到表/模型的额外属性,因此当我尝试保存时出错。这是更新方法
async update ({ params, request, response }) {
const contract = await Contract.find(params.id);
contract.merge(request.post());
return await contract.save();
}
问题是,当我早些时候在 get 请求中返回合同时,我添加了一些计算属性。我可以做一些类似的事情
const { prop1, prop2 } = request.post();
但这感觉不像是未来的证明或干净的解决方案。理想情况下,我希望对象仅具有在表/模型上定义的属性。我有一个验证器设置,如验证器文档中所述,但它仍然允许其他属性绕过它。
解决方案
我通过在模型类中添加一个 beforeSave 钩子来解决这个问题,该钩子过滤对象上的属性,这允许我们保留一个瘦控制器。
const FIELDS = ['id', 'description'];
class Contract extends Model {
static boot() {
super.boot();
this.addHook('beforeSave', async contractInstance => {
Object.keys(contractInstance.$attributes).forEach(key => {
if (!CONTRACT_FIELDS.includes(key)) {
delete contractInstance.$attribute[key];
}
});
});
}
}
推荐阅读
- angular - 我怎样才能有一个输入形式的数组?
- python - 如何同时通过循环两次遍历文本文件
- apache-kafka - 如何配置 Fluentd 配置文件以将日志发送到 Kafka?
- php - 即使我已经在控制器中解码了数组,字符串偏移也是非法的?
- javascript - 创建自定义命令作为 setValue() 的替代方法,我可以在其中控制类型速度
- shell - 根据第一列删除表中的重复条目(由冒号分隔的两个值组成)
- r - 尽管没有错误,但缺少晕影输出
- ant-media-server - 我们如何在 Windows 上安装 Ant Media Server?
- javascript - 替换两个字符之间的字符串
- python - 使用正则表达式删除日期周围的括号