json_a-6ren">
gpt4 book ai didi

web - Dart 红石网络应用程序

转载 作者:行者123 更新时间:2023-12-03 04:30:38 25 4
gpt4 key购买 nike

假设我配置红石如下

    @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 的一个很好的表示。 .

我想到的解决方案如下:
  • 第一的
  • 创建 web/user/user.htmlweb/user/user.dart ,配置后者运行时index.html被访问
  • user.dart监控查询参数( user.dart?id=10 ),发出适当的请求并在 user.html 中显示所有内容,即


  •          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 - 像网址一样。
  • 另一种方法是额外配置红石如下:

    @app.Route("/user/:id", methods: const [app.GET])
    getUser(int id) => app.redirect('/person/index.html?id=${id}');

  • 在这种情况下,至少允许使用“/user/10”之类的网址,但这根本行不通。

    我将如何正确地做到这一点?在我看来,redstone 的 git 上的 web 应用程序的例子是神秘而复杂的。

    我不确定这是否必须仅与红石或 Dart 有关,但我找不到任何相关内容。

    最佳答案

    我猜你正在尝试使用模板引擎在服务器中生成 html 文件。 Redstone 主要是为了构建服务而设计的,所以它没有内置的模板引擎,但是你可以使用任何 pub 上可用的引擎,例如 mustache .虽然,如果您使用 Polymer、AngularDart 或其他实现客户端模板系统的框架,则无需在服务器中生成 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() 函数,您可以使用该函数在内部分派(dispatch)请求,尽管响应是作为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 .见 here完整的 Redstone + Polymer 示例(shelf_static 在 bin/server.dart file 中配置)。

    关于web - Dart 红石网络应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28855777/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com