如何在本地使用Node.js代码运行CDS服务模块

2020-08-16 16:34发布

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

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


大家好,

我们使用Web IDE来开发一个CAP node.js项目,因为AppStudio是下一代Web IDE,所以我们决定切换到AppStudio,该项目指的是Thomas Jung 的存储库https://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/hana2_sps04_scp/srv/server.js#L79 , 有cds服务和自定义路由,节点server.js用于启动应用程序。 我们可以在Web IDE中成功运行和调试它。 将项目克隆到AppStudio后,我们可以构建mta并将其部署到cf,它可以成功运行,我们无法再使其在本地运行/调试。 这是我的发现:

  • 如果使用cds watch运行此项目,则所有cds服务均按预期方式工作(使用default-env.json连接到hdi),但是自定义路由会引发Cannot get 错误。 这是预料之中的,因为我们没有使用 node server.js ,因此不会加载自定义路由。
  • 如果我们使用节点server.js来运行此项目,我想将default-services.json用于连接到hdi,在这种情况下,cds服务将无法工作,并抛出错误无法读取属性'schema' 未定义,因为未提供hdi参数。 试图连接到HDI的自定义路由会抛出错误,仅允许安全连接。 如果我们使用hdbext中间件,则所有请求均以错误连接失败(RTE:[300002] OpenSSL不可用:未解析的符号。)结束。

我的问题:

  • 是否可以在AppStudio中运行此类cds/node.js项目?如何运行?
  • 如果不是,则表示需要将该项目分为2个项目:1个纯CD和1个纯node.js,在node.js + AppStudio中连接到hdi的最佳实践是什么?

我知道这是很多信息,非常感谢您的宝贵时间,欢迎提供任何反馈意见。

最好的问候

迈克

代码示例:

server.js https ://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/hana2_sps04_scp/srv/server.js#L79

自定义路由 https://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/hana2_sps04_scp/srv/router/routes/hanaClient.js

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

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


大家好,

我们使用Web IDE来开发一个CAP node.js项目,因为AppStudio是下一代Web IDE,所以我们决定切换到AppStudio,该项目指的是Thomas Jung 的存储库https://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/hana2_sps04_scp/srv/server.js#L79 , 有cds服务和自定义路由,节点server.js用于启动应用程序。 我们可以在Web IDE中成功运行和调试它。 将项目克隆到AppStudio后,我们可以构建mta并将其部署到cf,它可以成功运行,我们无法再使其在本地运行/调试。 这是我的发现:

  • 如果使用cds watch运行此项目,则所有cds服务均按预期方式工作(使用default-env.json连接到hdi),但是自定义路由会引发Cannot get 错误。 这是预料之中的,因为我们没有使用 node server.js ,因此不会加载自定义路由。
  • 如果我们使用节点server.js来运行此项目,我想将default-services.json用于连接到hdi,在这种情况下,cds服务将无法工作,并抛出错误无法读取属性'schema' 未定义,因为未提供hdi参数。 试图连接到HDI的自定义路由会抛出错误,仅允许安全连接。 如果我们使用hdbext中间件,则所有请求均以错误连接失败(RTE:[300002] OpenSSL不可用:未解析的符号。)结束。

我的问题:

  • 是否可以在AppStudio中运行此类cds/node.js项目?如何运行?
  • 如果不是,则表示需要将该项目分为2个项目:1个纯CD和1个纯node.js,在node.js + AppStudio中连接到hdi的最佳实践是什么?

我知道这是很多信息,非常感谢您的宝贵时间,欢迎提供任何反馈意见。

最好的问候

迈克

代码示例:

server.js https ://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/hana2_sps04_scp/srv/server.js#L79

自定义路由 https://github.com/SAP-samples/hana-xsa-opensap-hana7/blob/hana2_sps04_scp/srv/router/routes/hanaClient.js

付费偷看设置
发送
5条回答
Nan4612
1楼 · 2020-08-16 17:17.采纳回答

在这种情况下,我确实在本地进行了测试-具有自定义快速路由和CAP CDS的Node.js都从一项服务中挂接在一起。 此处的关键是确保在使用xsenv加载任何服务绑定之前,先调用xsenv.loadEnv()。 这将导致xsenv模块使用您的default-env.json。 https://www.npmjs.com/package/@sap/xsenv/ v/3.0.0#local-usage

还要确保现在在Node.js服务文件夹中有一个default-env.json。 cds watch(或cds run)将拾取项目根目录中的一个。 但是现在一切都相对于服务模块运行了。

就证书错误而言,如何生成default-env.json。 您要连接哪种HANA(内部,HANA即服务,HANA Cloud)? 我当然已经在连接到HaaS和HANA Cloud的Business Application Studio终端中对CDS和自定义Node.js使用了default-env.json。 但重要的是要确保证书正确地包含在default-env.json的服务绑定中,以便与HANA云版本一起使用,因为它们仅需要安全连接。 但是我希望,如果cds watch有效(并且连接到HANA-而不是SQLite-对吗?),同样的default-env.json也应该在此设置中起作用。

蓋茨
2楼-- · 2020-08-16 17:05

如果将文件夹名称从默认值更改,则还需要调整cds构建配置,以便知道哪些文件夹具有哪些角色。

我从不尝试模拟xsuaa。 我创建了一个XSUAA实例,并通过default-env.json中的条目连接到它,就像处理HANA服务一样。 这样,我就可以实际测试实际的服务了。

Cikesha
3楼-- · 2020-08-16 17:19

嗨,托马斯,

在CAP项目中,我将文件夹srv重命名为cds,这是我遇到这么多错误的原因吗? 将其更改回srv并运行cds watch之后,cds服务和自定义路由在AppStudio中都可以再次使用。

顺便说一下,下面的代码将导致未授权的错误,如何在本地测试中启用/模拟xsuaa授权?

 app.use(
 xsHDBConn.middleware(hanaOptions.hana),
 Passport.authenticate(" JWT",{
 会话:错误
 })
 );
 
宇峰Kouji
4楼-- · 2020-08-16 17:08

FYI,向.env1文件的hana凭据部分添加" encrypt":true可解决此错误。

悻福寶寶
5楼-- · 2020-08-16 17:02

在Visual Studio Code中运行此项目时 ,无法建立与hdi的连接,这是错误消息,有什么想法吗?

P.S。 我正在使用Windows 10。

 {"代码":-10709,"消息":"连接失败(RTE:[300010]无法创建SSL上下文:api.SSL_CTX_set_default_pse_by_name C:\\ dev \\ CommonCryptoLib \\中的错误-SSL错误[4129]  :未知错误,一般错误:0x00001021 | SAPCRYPTOLIB | SSL_CTX_set_default_pse_by_name \ nSAPCRYPTO API错误\ nPSE文件不存在。\ n0xa1d50108 | TOKEN_TOKPSE | SSL_CTX_set_default_pse_by_name \ E \ PS = P \ C \ Pon \ P = \ C \ P = \ P = \ P  \\,SECUDIR = C:\\ dev \\ CommonCryptoLib,user = xxxxxx)\ n0xa1d50108 | TOKEN_TOKPSE | sec_SSL_CTX_set_asc \ n令牌应用程序不存在\ n(ErrCode:4129)(zeus.hana.prod.eu-central-1.whitney  .dbaas.ondemand.com:3xxxx))"," sqlState":"","状态":500} 

一周热门 更多>