nodejs+mysql分页查询

router:(参数page,size)

goodsRouter.get("/getList",getGoodsList)

controller

  async getGoodsList(ctx,next){
  const { page, size } = ctx.query; // 获取查询参数
   // 将page和size转换为数字类型
   const parsedPage = parseInt(page);
   const parsedSize = parseInt(size);
   // 验证page和size是否为有效的数字
   if (isNaN(parsedPage) || isNaN(parsedSize) || parsedPage < 1 || parsedSize < 1) {
     ctx.status = 400; // 设置响应状态码为400,表示请求参数错误
     ctx.body = '无效的分页参数';
     return;
   }
 // 查询的起始索引
 const startIndex = (parsedPage - 1) * parsedSize;
  try {
    // 执行查询逻辑
    const goods = await service.getGoodsFromDatabase(startIndex, parsedSize);
    ctx.status = 200;
    ctx.body = goods; // 返回结果
  } catch (error) {
    console.error(error,"查询商品sql语句错误");
    ctx.status = 500;
    ctx.body = 'Internal Server Error';
  }
  // ctx.body = goods; // 返回结果
  }

service

  async getGoodsFromDatabase(page, size) {
    try {
      // 分页查询
      const statement = `SELECT * FROM goods LIMIT ?, ? `;
      // 注意这里必须转为字符串类型,因为用?占位传参数组时,SQL驱动程序期望是字符串类型,
      // 如果数字类型会报错Incorrect arguments to mysqld_stmt_execute,即使数字类型在navicat上面是成功的
      const result = await connection.execute(statement, [String(page), String(size)]);
      return result[0];
    } 
    catch(err){
      console.log(err,"数据库查询失败")
    }
}

补充关键词查询service:

 async getGoodsFromDatabase(Gtitle,Gaddress,page, size) {
    try {
      // 根据搜索内容动态搜索,都为空时给第一页全部,一个为空时单个查询
      let queryParams = [];
      let statement = 'SELECT * FROM goods';
      if (Gtitle || Gaddress) {
           statement += ' WHERE';
          if (Gtitle) {
           statement += ' Gtitle = ?';
           queryParams.push(Gtitle);
            }
          if (Gaddress) {
            if (Gtitle) {
            statement += ' AND';
              }
            statement += ' Gaddress = ?';
            queryParams.push(Gaddress);
            }
      }
      statement += ' LIMIT ?, ?';
      queryParams.push(String(page), String(size));
      // 注意这里必须转为字符串类型,因为用?占位传参数组SQL驱动程序期望是字符串类型,
      // 如果数字类型会报错Incorrect arguments to mysqld_stmt_execute,即使数字类型在navicat上面是成功的
      const result = await connection.execute(statement,queryParams)
      return result[0];
    } 
    catch(err){
      console.log(err,"数据库查询失败")
    }
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值