如何轻松地从带有目标的html5应用程序中消耗nodejs-backend?

时间:2019-03-26 09:01:08

标签: cloudfoundry sap-web-ide multitargeting sap-cloud-platform

我想将html5模块与nodejs后端“连接”,以便前端可以访问后端以获取数据库逻辑。我发现,我必须在scp中创建目标并将其写入approuter的mta.yaml和xs-app.js文件中。不幸的是,由于出现错误:“未找到”,因此无法正常工作。

html5前端仅发出ajax请求。 nodjs后端通过express接收请求并与db一起运行。

我在scp中创建了一个目的地,称为backendApi。网址是node_backend之一。

mta.yaml文件中的代码段:

name: node_backend
    type: nodejs
    path: node_backend
    requires:
      - name: mongodb-nemo-t01-service
      - name: cf_elb_postgres
    provides:
      - name: node_backend_api
        properties:
          url: '${default-url}'

- name: cfElbTimeline
    type: html5
    path: cfElbTimeline
    parameters:
      disk-quota: 500M
      memory: 500M
    build-parameters:
      builder: grunt
    requires:
      - name: node_backend_api
        group: destinations
        properties:
          name: backendApi
          url: '~{url}'
          forwardAuthToken: true

我的xs-app.js文件:

{
    "welcomeFile": "/index.html",
    "authenticationMethod": "route",
    "logout": {
        "logoutEndpoint": "/do/logout"
    },
    "routes": [{
        "source": "^(.*)$",
        "target": "$1",
        "service": "html5-apps-repo-rt",
        "authenticationType": "xsuaa"
    }, {
        "source": "^(.*)$",
        "target": "$1",
        "destination": "backendApi",
        "httpMethods": ["GET", "POST"],
        "authenticationType": "none"
    }]
}

它曾经可以通过前端访问后端,但是 html5应用程序存储库出现问题,因此该视图不可见。因此,我进行了更改,但无法回到要通过 approuter 网址访问后端的地步。路线的正则表达式可能有问题吗?

任何人都可以检查我的代码或可以解释它如何工作吗?

1 个答案:

答案 0 :(得分:1)

在xs-app.json中定义的路由要与同一模式匹配时,将按输入顺序考虑。意思是,您认为可能对API提出的任何请求均由第一条路线提供: HTML5回购服务仅包含静态文件。

另外,最好区分路线以避免混淆。您可以通过添加路由前缀或完全使用其他模式来区分API路由。

例如:

{
    "welcomeFile": "/index.html",
    "authenticationMethod": "route",
    "logout": {
        "logoutEndpoint": "/do/logout"
    },
    "routes": [{
        "source": "^(.*)$",
        "target": "$1",
        "service": "html5-apps-repo-rt",
        "authenticationType": "xsuaa"
    }, {
        "source": "^/api/(.*)$",
        "target": "$1",
        "destination": "backendApi",
        "httpMethods": ["GET", "POST"],
        "authenticationType": "none"
    }]
}

您将可以像这样从approuter访问目标:

https://<approuter_url>/<app_name-version>/api/whatever.xsodata