3

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

html5 前端只发出一个 ajax 请求。nodjs 后端通过 express 接收请求并使用 db 操作。

我在 scp 中创建了一个名为 backendApi 的目的地。url 是 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 url 访问后端时。也许路线的正则表达式有问题?

谁能检查我的代码或可以解释它应该如何工作?

4

1 回答 1

3

在匹配相同模式时,您的 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
于 2019-05-12T22:13:26.833 回答