如何在Node.js的RESTful API中传递多参数实现用户查询?
修改后的代码实现
嘿,这事儿不难,我帮你把代码调整成符合你需求的版本,同时加了点健壮性处理,具体如下:
完整修改后的代码
var express = require('express'); var router = express.Router(); // 调整路由:移除路径参数,改用查询字符串获取参数 router.get('/api/v1/getUserByUID', function(req, res, next) { // 从URL查询字符串中提取uid和role参数 const { uid, role } = req.query; // 先做参数校验,避免空查询或无效请求 if (!uid || !role) { return res.status(400).json({ error: '缺少必要参数,请同时提供uid和role' }); } // 执行带双条件的参数化SQL查询 connection.query( 'SELECT * from users where uid = ? and role = ?', [uid, role], // 参数顺序必须和SQL中的占位符一一对应 function(error, results, fields) { if (error) { // 捕获数据库错误并返回友好提示 return res.status(500).json({ error: `查询失败:${error.message}` }); } // 返回查询结果,若未找到用户则返回空数组 res.json({ data: results, message: results.length > 0 ? '查询成功' : '未找到匹配的用户' }); } ); });
关键修改点说明
- 路由调整:去掉了原来的
/:uid路径参数,因为现在是通过?uid=XXX&role=XXX这种查询字符串传递参数,不需要在URL路径中占位 - 参数获取方式:用
req.query.uid和req.query.role替代req.params.uid,req.query是Express自动解析URL查询字符串后生成的对象 - SQL查询更新:在原SQL语句中添加了
and role = ?的条件,同时在参数数组中传入uid和role,必须保证参数顺序和SQL占位符顺序一致(这是参数化查询防止SQL注入的关键) - 参数校验:增加了前置校验,如果用户没传uid或role,直接返回400错误,避免无效的数据库查询
- 错误处理:完善了数据库错误的捕获和返回逻辑,给前端更清晰的错误提示
内容的提问来源于stack exchange,提问作者Newbiee
相关产品推荐
相关产品推荐

