服務跨域處理&neo-app
學習Fiori有一段時間了,今天詳細瞭解了一下neo-app配置檔案,特在此記錄一下。
Eclipse + SAP UI5外掛開發是不需要neo-app配置檔案的,這個檔案主要是針對於Web IDE開發工具,用來讀取一些核心類庫的配置資訊以及服務路徑代理的配置。
Web IDE專案是跑在一個BS結構的web版的IDE,它的host和APP將要請求的host是不一樣的,那麼這就導致了一個不同host跨域的問題。
跨域的問題在Eclipse開發時是通過proxy來處理的,程式碼長成這樣:
proxy/http/www.yourhost.com
Web IDE開發不支援這個處理方法,而是提供neo-app.json這個配置檔案,通過Destination配置來完成跨域的處理,這個檔案通常的路徑在工程的根目錄下面。
neo-app.json一般都是這樣的:
{
"welcomeFile": "/webapp/index.html",
"routes": [
{
"path": "/resources",
"target": {
"type": "service",
"name": "sapui5",
"entryPath": "/resources"
},
"description": "SAPUI5 Resources"
},
{
"path": "/test-resources" ,
"target": {
"type": "service",
"name": "sapui5",
"entryPath": "/test-resources",
"version":"1.44.7"
},
"description": "SAPUI5 Test Resources"
},
{
"path": "/DemoService",
"target": {
"type": "destination",
"name": "ODataDemoService" ,
"version":"1.44.7"
},
"description": "Demo service"
}
],
"sendWelcomeFileRedirect": true
}
welcomeFile
是專案執行起來之後預設去找的路徑,判斷路徑是否有效,有效的話去載入工程的Component。
routes
是工程路由的一個配置,這個路由並不是專案頁面跳轉的路由,而是這個工程核心庫的路徑配置以及服務要訪問的路徑配置。
routes第一項裡的"path": "/resources"
,這個resources要對應index.html裡src裡面的resources。路徑匹配之後才可以訪問到sap-ui-core.js這個核心類庫,否則是找不到的。
部分index.html程式碼:
<script id="sap-ui-bootstrap"
src="../../resources/sap-ui-core.js"
data-sap-ui-libs="sap.m"
data-sap-ui-theme="sap_belize"
data-sap-ui-compatVersion="edge"
data-sap-ui-resourceroots='{"richard.odata.demoODataModelDemoCase": ""}'>
</script>
routes第二項裡的"path": "/test-resources"
, 和第一項配置大同小異,就不多說了。
第三項"path": "/DemoService"
, 這個就是服務反向代理配置。在controller裡呼叫服務的時候匹配DemoService就可以了,比如下面的controller部分程式碼:
var odataModel = new sap.ui.model.odata.v2.ODataModel('/DemoService/V2/(S(vwvvf40szqul4pkwqq50peal))/OData/OData.svc/', false);
裡面的 target “type”: “destination”, 這個destination主要是針對於SAP環境。 如果說gateway系統是在一個內網或者局域網裡,而Web IDE 和SAP是公有云服務,所以就需要這個destination將gateway的內網映射出來,使Web IDE 和SAP得以訪問。
destination的配置在賬號connectivity下面:
在可以配置多個destination,每個destination對應一個name,這個name要配置在neo-app檔案中,要和target下面的name一致 ,即”name”: “ODataDemoService”。
下面這張圖片就是一個destination的所有屬性,這裡的Name就是neo-app檔案target下面的name,URL是服務要訪問的真正地址。
到這裡neo-app的核心類庫配置和專案裡服務的代理詳解就完成了!