首页 > 解决方案 > 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之外的隐式验证,请告诉我。

标签: mysqlnode.jsapivalidationsequelize.js

解决方案


推荐阅读