我想将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 网址访问后端的地步。路线的正则表达式可能有问题吗?
任何人都可以检查我的代码或可以解释它如何工作吗?
答案 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