前不久,SAP发布了新的UI5工具正式生产版。这当然是UI5con上的一个大话题,有好几场会议都在讨论它。对于使用VisualStudioCode进行SAPUI5本地开发的从业者来说,这个版本中一个非常有用的特性就是解决了CORS问题:代理服务器。SAPUI5CORS问题目前有两种解决方案:代理服务器将您的应用程序的请求转发到UI5服务器,后者又转发到您的后端服务器文件,该文件拦截来自客户端的请求并将OData请求重定向到后端。在OpenSAP课程中,SAP使用npm模块CORS。这个CORSnpm模块有两个限制:使用代理需要更改应用程序manifest.json中的路径。这意味着开发人员总是需要在部署到系统之前或在CI设置中更改它。我在调用带有身份验证的服务时遇到了一些困难,并且没有找到解决我的问题的方法。让我们先尝试代理解决方案。此选项将使用express部署代理服务器。它需要两个Node.js模块:http-proxyexpress将这些模块定义为package.json中的devDependencies并运行npminstall以使用它们。添加nodeproxy.js启动命令行。在项目根目录下创建一个proxy.js文件:代码要点:加载所有需要的npm模块启动proxy如果UI5应用运行,定义到宿主机的路由从另一个配置文件odata.json加载到后端服务路由拦截来自托管代理的所有请求,并将它们转发到正确的路由。如果它匹配请求url的模式,它将使用配置文件中的路由,否则它将使用默认的应用程序主机。完整代码如下:constexpress=require('express'),httpProxy=require('http-proxy'),fs=require('fs'),proxy=newhttpProxy.createProxyServer();constappRoute={target:'http://localhost:5000'};constrouting=JSON.parse(fs.readFileSync('./odata.json'));varallowCrossDomain=function(req,res){res.header('Access-Control-允许来源','*');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');//拦截OPTIONS方法if('OPTIONS'===req.method){res.header(200);}else{vardirname=req.url.replace(/^\/([^\/]*).*$/,'$1');varroute=routing[目录名]||应用程序;console.log(req.method+':'+route.target+req.url);proxy.web(req,res,route);}};varapp=express();app.use(allowCrossDomain);app.listen(8005);console.log("Proxystartedonhttp://localhost:8005");odata.json内容:使用ui5serve启动SAPUI5应用:然后使用命令行npmrunproxy启动代理服务器:最终效果:
