CAP:自定义逻辑未接收查询参数

2020-08-25 13:35发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用如下查询。

 http://localhost:4004/analytics-output/ApplicationUsageByPeriod?$ filter = timestamp gt 2018-09-04T00:55:54Z 

我为此呼叫提供了一个自定义处理程序。 我想检查查询参数的显示方式,所以我做了这样的事情(仅用于测试)。

 module.exports = cds.service.impl(srv => {
  srv.on('READ','ApplicationUsageByPeriod',(req)=> {
  req.reject(409,JSON.stringify(req.data));
 //req.reject(409,JSON.stringify(req.query));
  })
 });
 

但是我得到一个空的输出,如下所示。

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  409 
  {} 
  

但是,如果我使用req.query而不是req.data,则会得到以下输出。 这似乎还好。

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  409 
 <消息>
 {" SELECT":{" from":{" ref":[" AnalyticsOutput.ApplicationUsageByPeriod"]}," columns":[{" ref":[" application"]},{" ref":[" applicationName"  ]},{" ref":[" count"]},{" ref":[" timestamp"]}}]," where":[{" ref":[" timestamp"]},">",{  " val":" 2018-09-04T00:55:54Z"}"," limit":{" rows":{" val":1000}}}}
 
  

所以我无法理解为什么在使用req.data时为什么没有得到输出。 有人遇到过吗?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在使用如下查询。

 http://localhost:4004/analytics-output/ApplicationUsageByPeriod?$ filter = timestamp gt 2018-09-04T00:55:54Z 

我为此呼叫提供了一个自定义处理程序。 我想检查查询参数的显示方式,所以我做了这样的事情(仅用于测试)。

 module.exports = cds.service.impl(srv => {
  srv.on('READ','ApplicationUsageByPeriod',(req)=> {
  req.reject(409,JSON.stringify(req.data));
 //req.reject(409,JSON.stringify(req.query));
  })
 });
 

但是我得到一个空的输出,如下所示。

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  409 
  {} 
  

但是,如果我使用req.query而不是req.data,则会得到以下输出。 这似乎还好。

 <错误xmlns =" http://docs.oasis-open.org/odata/ns/metadata">
  409 
 <消息>
 {" SELECT":{" from":{" ref":[" AnalyticsOutput.ApplicationUsageByPeriod"]}," columns":[{" ref":[" application"]},{" ref":[" applicationName"  ]},{" ref":[" count"]},{" ref":[" timestamp"]}}]," where":[{" ref":[" timestamp"]},">",{  " val":" 2018-09-04T00:55:54Z"}"," limit":{" rows":{" val":1000}}}}
 
  

所以我无法理解为什么在使用req.data时为什么没有得到输出。 有人遇到过吗?

付费偷看设置
发送
5条回答
哎,真难
1楼 · 2020-08-25 14:04.采纳回答

克里希纳,你好

req.data 不应包含查询选项。 实际上,我们目前还没有将它们直接添加到req对象中,但这是在路线图上。

同时,您可以从原始快递请求对象的 req ._。req.query 中获取它们。

最好,
塞巴斯蒂安

95年老男孩
2楼-- · 2020-08-25 13:58

只想说:好问题,结构良好,易于理解,并带有有用的代码块,谢谢!

小熊yu生菜
3楼-- · 2020-08-25 13:58

我认为req.data将提供在POST请求的有效负载(即主体)中发送的数据,而不是其他任何东西。 对我来说,即使没有看,也正是该API名称从同一空间中的其他库中获得的"感觉"。

我注意到文档位于 https://cap.cloud。 sap/docs/node.js/api#reqdata --- 说" 将所有查询参数以及http帖子正文捕获为单个对象",但我不确定这是正确的 ,至少不是我的经验-也许其中一个团队也可以在这里发表评论。

我也对此进行了测试,并且得到了我期望的结果:

 module.exports = srv => {
   srv.before('CREATE','Things',req => {
     console.log(" DATA:",req.data)
     console.log(" QUERY:",req.query)
   })
 }
 

并带有以下请求:

 curl -H'内容类型:application/json'-d'{" ID":1," name":" DJ"}'  http://localhost:4004/test/Things
 

我得到以下输出:

 DATA:{ID:1,名称:" DJ"}
 查询:{插入:{到:'dj.Things',条目:[{ID:1,名称:'DJ'}]}}
 

干杯

绿领巾童鞋
4楼-- · 2020-08-25 14:05

嗨,克里希纳,

很抱歉,但该路线图无法从外部获得。

最佳,
塞巴斯蒂安

5楼-- · 2020-08-25 14:12

嗨,DJ,

您正确的认为" 将所有查询参数以及http帖子正文捕获为一个对象"是错误的。 感谢您指出这一点。

最佳,
塞巴斯蒂安

一周热门 更多>