Dart redstone web应用程序

时间:2015-03-04 13:32:40

标签: web dart redstone.dart

我们说我按照以下方式配置redstone

    @app.Route("/raw/user/:id", methods: const [app.GET])
    getRawUser(int id) => json_about_user_id;

当我运行服务器并转到/raw/user/10时,我会以字符串的形式获取原始json数据。

现在我希望能够去/user/10,并从/raw/user/10得到这个json的好表现。

我想到的解决方案如下:

  1. 首先
    • 创建web/user/user.htmlweb/user/user.dart,将后者配置为在访问index.html时运行
    • user.dart监控查询参数(user.dart?id=10)中,发出适当的请求并在user.html中显示所有内容,即
  2.          var uri = Uri.parse( window.location.href );
             String id = uri.queryParameters['id'];
             new HttpRequest().getString(new Uri.http(SERVER,'/raw/user/${id}').toString() ).then( presentation )
    

    这个解决方案的缺点是我没有达到/user/10 - 就像网址一样。

    1. 另一种方法是另外配置redstone如下:

      @app.Route("/user/:id", methods: const [app.GET])
      getUser(int id) => app.redirect('/person/index.html?id=${id}');
      
    2. 在这种情况下,至少需要像#34; / user / 10"是允许的,但这根本不起作用。

      我该如何正确地做到这一点?在我看来,redstone的git上的网络应用程序示例含糊不清且参与其中。

      我不确定是否必须通过连接红石或飞镖来解释,但我找不到任何相关内容。

1 个答案:

答案 0 :(得分:2)

我猜你试图用模板引擎在服务器中生成html文件。 Redstone主要用于构建服务,因此它没有内置模板引擎,但您可以使用pub上可用的任何引擎,例如mustache。虽然,如果您使用Polymer,AngularDart或其他实现客户端模板系统的frameowrk,您不需要在服务器中生成html文件。

此外,如果您想重用其他服务,您可以直接调用它们,例如:

@app.Route("/raw/user/:id")
getRawUser(int id) => json_about_user_id;

@app.Route("/user/:id")
getUser(int id) {
  var json = getRawUser();
  ...
}

Redstone v0.6(仍然在alpha中)还包含一个新的foward()函数,您可以使用它来在内部调度请求,但是,响应是作为shelf.Response对象接收的,因此您必须阅读它:

@app.Route("/user/:id")
getUser(int id) async {
  var resp = await chain.forward("/raw/user/$id");
  var json = await resp.readAsString();
  ...
}

修改

要提供静态文件,例如在浏览器中执行的html文件和dart脚本,您可以使用shelf_static middleware。有关完整的Redstone + Polymer示例,请参阅here(在bin/server.dart file中配置了shelf_static)。