nodejs+mysql分页查询
nodejs koa + 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,"数据库查询失败")
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)