在通用单页应用(SPA)中,我将使用 Express.js 实施路由逻辑。但是在 SAPUI5 环境中应该使用哪种方法?我应该依靠 SAPUI5 的sap.ui.core.routing.Router
和sap.m.routing.Router
路由模块还是通过 Express.js 实现此类功能> ?
答案 0 :(得分:3)
我认为您对路由概念有些困惑。让我们尝试澄清一下。
Express是用于构建HTTP接口的服务器端Node.js库。在这种情况下,路由是指将传入的请求与处理程序函数进行匹配(例如,基于URL模式)。然后,处理函数必须根据传入的请求(状态,标头,正文等)产生HTTP响应。这类似于Spring @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上下文,并且仍然可以访问以前加载的资源。这类似于React Router
,Angular 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的背景下,无论如何还不能轻易做到。