使用红石服务网页

Serving a webpage with Redstone

我正在使用 Dart 使用 redstone and polymer 开发 Web 应用程序 因为 Dart 允许服务器端和客户端开发,所以我想知道 Web 应用程序的好的模式是什么(特别是 Dart)

选项 1:

  1. 有一个服务器,比如说,/bin/server.dart

    1.1。在那里收到请求并回复 json

    @app.Route("/user/:id", methods: const [app.GET])
    getUser(int id) { ... }
  1. 有一个客户,即 web/user.html 和 web/user.dart

    2.1 in user.dart 向服务器发出请求

    2.2 接收json并形成一个合适的user.html

选项 2:

  1. 有服务器/bin/server

    1.1 在那里收到请求并用 html 页面响应,类似于

    @app.Route("/")
    helloWorld() => "Hello, World!";

如果在第一种情况下我或多或少知道(并理解)如何使事情正常进行,但我发现我没有利用 Dart 的服务器-客户端代码共享真的很令人沮丧:我需要编码并解码回 json 以获得相同的数据。有办法避免吗?

第二个选项对我来说不太清楚:我将如何以这种方式提供网页?我如何让 Polymer 发挥作用?

非常感谢对文中问题的回答以及对开发 Web 应用程序的大胆方法的一般解释。

我认为选项 2 不可行。 Polymer 依赖于服务器端不允许的 dart:html。

您可以在此处查看红石 + 聚合物应用示例:https://github.com/luizmineo/io_2014_contacts_demo

基本上,它的工作方式是Option 1:客户端和服务器通过服务API进行通信,数据编码为JSON。虽然,Redstone 也使用 shelf_static 包来为浏览器提供客户端代码。

如果您愿意,也可以使用服务器端模板引擎(例如 mustache)在服务器中构建 html 页面,尽管我认为将其与 Polymer 集成真的很困难.

最后,在客户端和服务器之间传输数据时,您总是必须以某种方式对数据进行编码,但这并不意味着它们不能共享代码。例如,他们可以使用相同的域 类。查看上面链接的示例应用程序以了解更多详细信息。