ArangoDB Foxx微服务如何将路由queryParam转换为body参数
Foxx路由参数从queryParam转为请求体传递的实现方案
原有代码问题梳理
- 重复嵌套了
db._query(aql语句,存在语法错误 - 未显式定义请求体的Joi校验结构,Foxx无法自动解析
req.body对应字段 - 存在多个未使用的冗余变量声明
正确实现代码
router.post('/PersonInformation', function (req, res) { const keys = db._query(aql` FOR p IN Personal FILTER (p.stateId IN ${req.body.statePar} OR IS_NULL(${req.body.statePar})) AND p.empDate >= TO_NUMBER(${req.body.fromDatePar}) AND p.empDate <= TO_NUMBER(${req.body.toDatePar}) RETURN p `); res.send(keys); }) // 定义请求体结构与校验规则 .body(joi.object({ statePar: joi.array().default(null), fromDatePar: joi.string().required(), toDatePar: joi.string().required() }), 'Personal information query parameters') .response(joi.array().items( joi.string().required() ).required(), 'List of entry keys.') .summary('List entry keys') .description('Assembles a list of keys of entries in the collection.');
改动说明
- 替换原有
.queryParam配置为.body配置,传入Joi对象声明请求体的字段结构、校验规则,和原有query参数的校验逻辑保持一致 - 修正语法错误,删除冗余的重复查询语句和未使用变量
- 路由处理函数中直接从
req.body中读取对应字段即可,原有数据过滤逻辑无需修改
内容的提问来源于stack exchange,提问作者Ghasemi
相关产品推荐
相关产品推荐

