前不久,SAP 公布了新 UI5 工具的官网生产版本。 这当然是 UI5con 上的一个大话题,有几个对于它的会议。对于应用 Visual Studio Code 进行 SAP UI5 本地开发的从业者来说,这个版本里一个十分有用的性能,就是对于 CORS 问题提供的解决方案:代理服务器。

对于 SAP UI5 CORS 问题目前有两种解决方案:

  • 代理服务器将您的应用程序的申请转发到 UI5 服务器,后者再转发到您的后端服务器
  • UI5 CLI 服务器代理扩大:新工具容许开发人员扩大服务器中间件,从而能够拦挡来自客户端的申请并将 OData 申请重定向到后端。

在 OpenSAP 课程中,SAP 应用了 npm 模块 CORS。

这个 CORS npm 模块有两个局限性:

  • 应用代理时须要更改应用程序 manifest.json 中的门路。 这意味着开发人员始终须要在部署到零碎之前对其进行更改,或者在 CI 设置中进行更改。
  • 我在通过身份验证调用服务时遇到了一些艰难,还没找到解决问题的方法。

咱们首先尝试 proxy 解决方案。

此选项将应用 express 来部署代理服务器。 它须要两个 Node.js 模块:

  • http-proxy
  • express

在 package.json 中将这些模块定义为 devDependencies 并运行 npm install 来应用它们。

增加一个 node proxy.js 的启动命令行。

在我的项目的根目录创立一个 proxy.js 文件:

代码关键点:

  • 加载所有须要的 npm modules
  • 启动 proxy
  • 如果 UI5 应用程序正在运行,则定义到主机的路由
  • 从另一个配置文件 odata.json 加载到后端服务的路由
  • 拦挡来自托管代理的所有申请并将其转发到正确的路由。如果匹配申请 url 的模式,它将应用配置文件中的路由,否则它将应用默认的应用程序主机。

残缺代码如下:

const express = require('express'),    httpProxy = require('http-proxy'),    fs = require('fs'),    proxy = new httpProxy.createProxyServer();const appRoute = {    target: 'http://localhost:5000'};const routing = JSON.parse(fs.readFileSync('./odata.json'));var allowCrossDomain = function(req, res) {    res.header('Access-Control-Allow-Origin', '*');    res.header('Access-Control-Allow-Credentials', 'true');    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');    res.header('Access-Control-Allow-Headers', 'X-Requested-With, Accept, Origin, Referer, User-Agent, Content-Type, Authorization, X-Mindflash-SessionID');    // intercept OPTIONS method    if ('OPTIONS' === req.method) {        res.header(200);    } else {        var dirname = req.url.replace(/^\/([^\/]*).*$/, '$1');        var route = routing[dirname]  || appRoute;        console.log(req.method + ': ' + route.target + req.url);        proxy.web(req, res, route);    }};var app = express();app.use(allowCrossDomain);app.listen(8005);console.log("Proxy started on http://localhost:8005");

odata.json 的内容:

应用 ui5 serve 启动 SAP UI5 利用:

而后再应用命令行 Npm run proxy 启动代理服务器:

最初的成果: