在一个通用的单页应用(SPA),我会实现与Express.js路由逻辑。但是,我应该SAPUI5环境中使用什么方法呢?我应该依靠SAPUI5的sap.ui.core.routing.Router
和sap.m.routing.Router
路由模块或Express.js实现这样的功能?
我觉得你稍微有一些混乱路由概念。让我们尝试澄清他们一点点。
Express是一个服务器端的Node.js库,用于构建HTTP接口。在这种情况下,路由是指匹配的输入请求到一个处理函数(基于URL模式例如)。然后,处理程序函数必须产生基于所述传入的请求(状态,标题,主体等)的HTTP响应。这是类似于春天@RequestMapping
,JAX-RS @Path
,Rails的路由等
// Express route
// all GET requests on the / URL will be handled by this function
// which in turn sends back a plain text "Hello world!" response
app.get('/', (req, res) => res.send('Hello World!'))
用于上述实施例的代码匹配请求:GET http://localhost:3000/
。
UI5是构建客户端,单页应用程序的框架。正如你提到的,它有一个内置的基于散列的路由器。在这种情况下,路由是指浏览器的当前位置匹配您的SPA内部的视图。通常(但不总是),这是通过将散列作为UI5这样做,即通过#
符号后的URL的一部分来完成。这是使用,因为只影响散列URL变化不会导致浏览器加载一个新的页面。这反过来又保证了JavaScript的情况下不被破坏+重新创建和先前加载的资源仍然可以访问。这是类似于阵营Router
,角Router
,秘银路由等。
// UI5 router config
// it first defines where are your views (in the sap.ui.demo.nav.view "package")
// and where the views should be rendered (inside the pages of the app control)
// lastly, it defines one route, which matches the /home URL inside the app to
// the Home view.
"routing": {
"config": {
"routerClass": "sap.m.routing.Router",
"viewType": "XML",
"viewPath": "sap.ui.demo.nav.view",
"controlId": "app",
"controlAggregation": "pages"
},
"routes": [{
"pattern": "/home",
"name": "appHome",
"target": "home"
}],
"targets": {
"home": {
"viewId": "home",
"viewName": "Home"
}
}
}
例如,对于上述的配置相匹配的位置:http://localhost:3000/index.html#/home
。
从本质上说,如果你想建立一个Node.js的后端一个UI5应用程序,你很可能会同时使用:
希望这提供了一些清晰。
后来编辑:有一件事我忘了server side rendering。这可能更浑水摸鱼,但在UI5的情况下,它不能做(但)很容易反正。