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,"数据库查询失败")
    }
  }

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐