含switch语句的getSQL函数无法生成正确SQL语句,寻求技术协助
问题排查与修复方案
看起来你的问题出在getsql函数的默认分支处理上,还有一些冗余代码需要清理。咱们一步步来拆解问题并修复:
核心问题分析
- 默认分支无有效返回值:当传入的
key不是1或2时,getsql的default分支没有返回任何内容,导致sql变量变为undefined,直接传给db.query会触发数据库查询错误。 - 冗余的
break语句:case分支里的return已经会终止函数执行,后面的break永远不会被执行,属于无效代码。
修复后的代码示例
1. 修正getsql函数
function getsql(key) { switch (key) { case 1: return 'SELECT * FROM main WHERE 1'; case 2: return 'SELECT * FROM location WHERE 1'; default: // 可根据业务需求选择:返回安全默认查询,或抛出错误 return 'SELECT 1'; // 安全空查询示例 // 或者 throw new Error('Invalid key parameter: must be 1 or 2'); } };
2. 增强路由的错误处理
operations.get('/filter/:key', function (req, res) { try { const key = parseInt(req.params.key); // 先校验参数是否为有效数字 if (isNaN(key)) { return res.status(400).json({ error: 'Invalid key: must be a numeric value' }); } const sql = getsql(key); db.query(sql, function (error, results) { if (error) { return res.status(500).json({ error: `Database query failed: ${error.message}` }); } res.json(results); }); } catch (err) { res.status(500).json({ error: `Server error: ${err.message}` }); } })
关键修改说明
- 给
default分支添加了有效返回值,确保sql始终是合法字符串; - 移除了无用的
break语句,精简代码; - 增加了参数合法性校验,提前拦截非数字的
key; - 给数据库查询和整个路由添加了错误捕获,能更友好地返回错误信息,避免服务崩溃。
内容的提问来源于stack exchange,提问作者Awudi Eric Okyere
相关产品推荐
相关产品推荐

