Как легко использовать nodejs-backend из приложения html5 с пунктами назначения? - PullRequest
1 голос
/ 26 марта 2019

Я хочу "соединить" модуль html5 с бэкэндом nodejs, чтобы интерфейс мог обращаться к бэкэнду для логики дБ. Я обнаружил, что мне нужно создать место назначения в scp и записать его в файл mta.yaml и xs-app.js для approuter. К сожалению, это не работает должным образом, так как есть ошибка: «Not Found».

Интерфейс html5 делает просто запрос ajax. Бэкэнд nodjs получает запросы экспрессом и работает с 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 *1016*, поэтому представление не было видно. Поэтому я изменил его, но не могу вернуться к тому моменту, когда я смог получить доступ к бэкэнду через URL-адрес approuter . Может быть, что-то не так с регулярным выражением маршрута?

Может кто-нибудь проверить мой код или объяснить, как он должен работать?

1 Ответ

1 голос
/ 13 мая 2019

Маршруты, определенные в вашем 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
...