使用athena-express调用AWS Athena传req.body参数报错如何解决?
问题原因及解决方案
核心错误原因
你当前使用的athena-express库不支持query(SQL字符串, 参数数组)的传参格式,你传入的参数数组没有被库识别,导致Athena收到的查询语句里的占位符?没有对应参数填充,才会抛出「期望1个参数但实际传入0个」的错误。
修复步骤
1. 调整查询语句的传参格式
athena-express要求把SQL语句和查询参数都放到同一个对象中传入query方法,对应属性为sql和params。
2. 确认服务端已配置JSON解析中间件
如果你的服务基于Express开发,需要确保已经开启了JSON请求体解析,否则req.body无法正常拿到Postman传入的参数,示例配置如下:
// 需在Express入口文件的路由注册前添加 app.use(express.json())
3. 确认Postman配置正确
请求体格式要选择raw -> JSON,传入的JSON结构和键名要和代码中解构的字段完全一致,示例:
{ "building_abbreviation": "你实际要查询的建筑缩写值" }
4. 可选:添加参数校验日志
可以在拿到req.body后打印参数值,确认参数正常获取,避免拼写错误、请求格式选错之类的低级问题。
修改后的核心代码
getData: async (req, res) => { const { building_abbreviation } = req.body // 可选:打印确认参数是否正常拿到 // console.log('查询参数:', building_abbreviation) try { // 调整传参格式为标准对象格式 let results = await athenaExpress.query({ sql: "SELECT * FROM building_meter_metadata WHERE building_abbreviation = ?", params: [building_abbreviation] }) return res.json(results) } catch (error) { console.log(error) return res.status(500).json({msg: '查询失败', error: error.message}) } }
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

