UI5路由实施:Express.js与SAPUI5路由功能

时间:2019-02-02 11:47:27

标签: express routing sapui5 url-routing single-page-application

在通用单页应用(SPA)中,我将使用 Express.js 实施路由逻辑。但是在 SAPUI5 环境中应该使用哪种方法?我应该依靠 SAPUI5 sap.ui.core.routing.Routersap.m.routing.Router路由模块还是通过 Express.js 实现此类功能>

1 个答案:

答案 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应用程序,则很可能会同时使用两者:

  • 用于构建服务器端REST API的快速路由。
  • 用于处理用户界面内部导航的UI5路由。

希望这可以提供一些清晰度。


后来编辑:我省略的一件事是server side rendering。这可能会使水更加混乱,但是在UI5的背景下,无论如何还不能轻易做到。