Node Express+SQL按名称搜索接口路由配置问题求助
问题分析与解决方案
你的代码存在几处关键问题导致搜索功能无法正常工作,以下是具体修正步骤:
1. 路由配置不匹配
你定义的路由是/search/:query(属于路由参数,需要在URL路径中传值,比如/search/ipa),但从截图看你实际使用的是查询参数(?search=xxx),因此路由应修改为不带:query的/search。
2. SQL语句的两处错误
- 用双引号包裹SQL语句时,内部的
${search}无法被解析为模板变量,需替换为反引号`; - 直接拼接字符串会引发SQL注入风险,必须改用参数化查询来规避这个问题。
3. 变量未声明隐患
search变量未用const/let声明,会成为全局变量,存在代码安全隐患。
修正后的代码
app.get('/search', (req, res) => { pool.getConnection((err, connection) => { if (err) { console.error(err); return res.status(500).send('数据库连接失败'); } console.log(`connected as id ${connection.threadId}`); const search = req.query.search; // 用参数化查询避免SQL注入,单独处理LIKE的通配符 const sql = "SELECT * FROM beers WHERE name LIKE ?"; // 将通配符与搜索值拼接后作为参数传入 connection.query(sql, [`%${search}%`], (err, rows) => { connection.release(); // 释放连接回连接池 if (!err) { res.send(rows); } else { console.error(err); res.status(500).send('查询失败'); } }); }); });
Postman请求示例截图

修改完成后,在Postman中使用GET /search?search=xxx即可正常执行搜索。
内容的提问来源于stack exchange,提问作者salm00n
相关产品推荐
相关产品推荐

