点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
一切正常。 从那里,我成功创建了一个单独的项目以使用Bookshop服务。 在其中,我使用" sap-cloud-sdk generate-odata-client"命令基于该服务创建了一个OData客户端。 我在" service-mapping.json"内部将服务路径设置为"/img/browse",然后为该服务重写了odata-client。
从那里,我想定义一个API端点以从服务中获取所有订单。 这就是我的Cloud SDK API的orders.service.ts。 然后,当然,控制器会使用该服务功能,该功能会将功能路由到GET请求的"/img/books"。
从'@ nestjs/common'导入{可注入}; 从" odata-client/catalog-service"导入{Books}; const serviceLink:字符串='http://localhost:4004' @Injectable() 导出类BooksService { 异步getAllBooks(){ const books = await Books.requestBuilder() 。得到所有() .execute({url:serviceLink}); console.log(books); 还书; } }
无论如何,请求构建器都会创建HTTP请求'GET/browse/Books?$ format = json',该请求会在Postman中返回正确的结果,但在SDK中不起作用。 CAP API的控制台识别出已发送获取请求,但是SDK API给出错误"无法读取未定义的属性"结果"。 为了使这两个API相互连接,是否需要添加任何额外的样板文件?
SAP社区在解决这类问题方面非常有帮助,对此我深表感谢! 谢谢!
编辑:更多详细信息
这是图书管理员的样子:
import从'@ nestjs/common'导入{Controller,Get}; 从" ./books.service"导入{BooksService}; @Controller('books') 导出类BooksController { 构造函数(私有readonly booksService:BooksService){} @得到() getAllBooks(){ 返回this.booksService.getAllBooks() } }
这将导入到其对应的模块中,并由app模块使用。 因此,我最终要向" http://localhost:3000/books"发出GET请求。
感谢@dhem,他说CAP需要一个OData v2适配器才能接收来自Cloud SDK API的请求。 我在OData v2适配器的存储库中阅读了自述文件:
https: //github.com/gregorwolf/SAP-NPM-API-collection/tree/master/apis/cds-odata-v2-adapter-proxy
仅对说明进行总结,请在现有CAP项目中运行命令:
完成后,在" srv"文件夹中添加一个" server.js",并向其中添加以下代码:
再次运行项目后,请在服务路径前添加"/img/v2"。 对于OData客户端生成,需要对service-mapping.json执行相同的操作。 重新生成OData客户端并再次运行项目后,它应该可以正常工作。
我打印了错误的堆栈,结果是:
SDK应该可以正常工作。 就像我只是写一个通用的get处理程序说"你好"一样,它绝对可以正常工作。 SDK正在调用CAP OData服务,以便最终从该服务获取信息。
我怀疑可能是什么问题。 我认为CAP默认使用v4协议公开OData服务,而生成器现在仅支持v2。 这可以解释为什么在处理200响应期间会引发错误。 CAP提供了将v4转换为v2的协议适配器,您可以尝试将其添加到服务中。 另外,您能否分享来自邮递员的CAP服务回复? 这应该有助于检查我的怀疑是否正确。
谢谢丹尼斯,
您获得了巨大的帮助! 这是SDK的响应:
因此,现在,我将了解如何将v2适配器注入CAPM项目。 我会告诉您是否可行
很高兴看到这种方法有效!
一周热门 更多>