我在Foxx Microservices中编写了以下路由器:
router.post('/PersonInformation', function (req, res) {
const keys = db._query(aql`
FOR p IN Personal
FILTER (p.stateId IN ${req.queryParams.statePar} OR IS_NULL(${req.queryParams.statePar}))
AND p.empDate >= TO_NUMBER(${req.queryParams.fromDatePar}) AND p.empDate <= TO_NUMBER(${req.queryParams.toDatePar})
RETURN p
`);
res.send(keys);
})
.queryParam('statePar', joi.array().default(null), 'State Parameter')
.queryParam ('fromDatePar', joi.string().required(), 'FromDate Parameter')
.queryParam('toDatePar', joi.string().required(), 'ToDate Parameter')
.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参数。我使用.body代替.queryParam,但它没有响应。我还编写了如下表,但它仍然不起作用:
router.post('/PersonInformation', function (req, res) {
const distributorIdPar = req.body;
const cityPar = req.body;
const productIdPar = req.body;
const fromDatePar = req.body;
const toDatePar = req.body;
const keys = db._query(aql`
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);
})
.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.');
1条答案
按热度按时间mwyxok5s1#
您有一个重复的
const keys = db._query(aql``行,它破坏了语法。此外,您没有设置
.body(joi.object())或
.body(['application/json']),这导致
req.body成为一个缓冲区: 如果尚未为当前路径定义几何体,则该值将与rawBody -[docs](https://www.arangodb.com/docs/stable/foxx-reference-routers-request.html)相同 您还将
req.body赋给各种变量,但实际上并不使用它们。 我将使用解构方法将body参数赋给局部变量以获得保证值,并对
statePar使用常规赋值,以便在body中省略它时可以默认为
null。此外,我将对
fromDatePar和
toDatePar强制使用数值(注意,这需要joi中的
strict(),否则它将很乐意接受数字字符串)并从查询中删除
TO_NUMBER()。下面的代码接受
statePar的字符串数组,或者期望该属性不存在。它不允许使用
"statePar":null、
"statePar":[]和
"statePar":[null]`,但您可以根据需要进行更改。