我试图在续集中设置一些控制器. 我希望能够有不同类型的查询,例如:

api/hotels
api/hotels/id 
api/hotels?featured=true
api/hotels?featured=true&limit=SOMEVALUE
api/hotels?featured=true&limit=SOMEVALUE&somethingsomething

我已经设法让Feature和Limit都工作了,然而,如果我没有Limit,其余的都不能正常工作,因为Limit将在我的后端服务器中设置为0:/

可以将各种查询设置为可选吗? 我可能会补充说,这是我第一次运行Sequelize和Creating Backend.

我的控制器如下所示:

export const getHotels = async (req, res, next) => {
  try {
    const { min, max, limit, ...others } = req.query;
const parsedLimit = limit ? Number(limit) : null;
    const hotels = await Hotel.findAll({
      where: {
        ...others,
        // cheapestPrice: { $gt: min | 1, $lt: max | 100000 },
      },
      limit: Number(parsedLimit),
      [Op.or]: {},
    });
    res.status(200).json(hotels);
  } catch (err) {
    next(err);
  }
};

我要补充的是,最小值和最大值应该用在cheapestPrice中,作为对API的另一个查询.

提前谢谢你

推荐答案

您可以根据请求中是否存在相应的参数,有条件地将各种查询包括在Sequelize查询中,从而使各种查询成为可选的.像这样的事情应该行得通,

export const getHotels = async (req, res, next) => {
  try {
    const { min, max, limit, featured, somethingsomething } = req.query;
    const whereClause = {};

    // optional query parameters
    if (min || max) {
      whereClause.cheapestPrice = {
        [Op.gt]: min || 1,
        [Op.lt]: max || 100000,
      };
    }

    if (featured) {
      whereClause.featured = featured;
    }

    // you can add more optional parameters in a similar manner

    const hotels = await Hotel.findAll({
      where: whereClause,
      limit: limit ? Number(limit) : null,
      // include other options as needed
    });

    res.status(200).json(hotels);
  } catch (err) {
    next(err);
  }
};

Mysql相关问答推荐

SQL Store Procedure Throwing [42000][1064]您在EXECUTE stat USING声明上的SQL语法中有错误

如何改进对另一个表中多行的查询依赖性

根据 MySql 中同一表中的多列 Select 多列

如何让连续 3 周或以上的用户有订单?

SQL 根据多行值获取记录

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

查询获取日期之间的可数匹配条目并加入它们以读取用户状态

如何使用同一个表在 2 个字段上左连接

MySql中的可见索引和不可见索引是什么

将 wordpress 自定义字段转换为单个数组

如何通过if语句对SQL查询进行排序

MySQL时区更改?

如何存储百分比值?

在 Android 上运行 AMP (apache mysql php)

MySQL INSERT IF(自定义 if 语句)

将 Blob 转换为字节数组的最简单方法

我可以在 PHP 中使用 PDO 创建数据库吗?

如何从命令行调用带有参数的mysql存储过程?

如何将本地托管的 MySQL 数据库与 docker 容器连接

数据截断:第 1 行的logo列数据太长