Node Express带URL参数的GET路由开发:serviceID列无效报错排查
错误根因
- 参数传递不匹配:控制器调用repository方法时,直接传递了
req.params.serviceID的原始值(如数字26),但repository层的getService方法默认入参是对象,尝试读取.serviceID属性时实际拿到的是undefined,knex拼接SQL时会出现字段识别异常 - 字段名不匹配:若修复参数问题后仍报错,说明数据库
service表中不存在名为serviceID的列,实际列名可能为id/service_id等,需和表结构核对
修复方案
选以下任意一种适配参数传递规则即可:
方案1:修改repository层参数接收逻辑
// repository层修改后代码 getService = async (serviceID) => { return await knex("service").select().where("serviceID", serviceID) }
方案2:修改控制器层传参格式
// 控制器层修改后代码 const getService = async (req, res) => { try { const data = await serviceRepository.getService({serviceID: req.params.serviceID}); res.send(data); } catch (error) { throw error; } }
如果参数修复后仍报错,直接修改knex查询语句中的列名为service表的实际字段名即可。
内容的提问来源于stack exchange,提问作者John Shelby
相关产品推荐
相关产品推荐

