mysql - Sequelize 不会为 findAll 和 findOne 方法中的无效输入抛出错误
问题描述
我已经构建了一个 nodejs express 应用程序,它使用 sequelize 作为 ORM 来处理 MySQL 事务。创建、更新和删除请求的验证没有问题,但是如果我尝试使用 findOne 和 findAll 方法获取数据,sequelize 似乎会逃逸以验证数据。
我尝试使用validate为 sequelize 编写隐式验证,但它仍然不起作用。
这是代码:
getTradeOrder: async (params) => {
try {
// for params: {amount: '500jha'}
// tradeorder is fetched as if the amount's value was 500
let data = await TradeOrder.findOne({ where: params });
// returns data:{id:2, user:"gfa7834djksfyui32", amount:500, ...}
return { status: 200, error: null, data: data };
} catch (err) {
console.log(err);
return {
status: 400,
error: err.message,
};
}
},
listAllTradeOrders: async (params) => {
try {
// for params: {amount: '500jha'}
// tradeorders are fetched as if the amount's value was 500
let tradeOrders = await TradeOrder.findAll({
where: params,
});
// returns tradeorders:[{id:2, user:"gfa7834djksfyui32", amount:500, ...}, ...]
return { status: 200, error: null, data: tradeOrders };
} catch (err) {
console.log(err);
return {
status: 400,
error: err.message,
};
}
},
};
这是模型:
const tradeOrderSchema = {
id: DataTypes.NUMBER,
user: DataTypes.STRING,
amount: DataTypes.NUMBER,
paymentMode: DataTypes.STRING,
units: DataTypes.NUMBER,
bankName: DataTypes.STRING
...
理想情况下,sequelize 应该捕获无效值并为无效的数量值抛出错误。如果有人知道为什么它没有发生或如何添加除validate之外的隐式验证,请告诉我。
解决方案
推荐阅读
- c++ - 在无向图中打印循环
- android - java.lang.NoClassDefFoundError:解析失败:Landroidx/test/internal/runner/listener/InstrumentationRunListener
- python - Python - 从 Google Drive 下载文件作为计划任务
- docker - 如何在动态环境中设置 Kafka 安全性和侦听器?
- regex - 只限制正则表达式的一部分而不是整个表达式本身?
- node.js - 存储过程的批量更新插入(更新或插入)
- c++ - 输入 std::array 时遇到问题
- javascript - 使用“onclick”时如何运行 2 个或更多功能?
- swift - Swift 包管理器,如何将包添加为开发依赖项?
- python - 在 xpath 表达式 lxml 中使用 for 表达式