0

次のようにレッドストーンを設定するとしましょう

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

サーバーを実行して に移動する/raw/user/10と、生の json データが文字列の形式で取得されます。

今、私はに/user/10行き、私がから得たこのjsonの素晴らしい表現を取得したいと思います/raw/user/10.

私の頭に浮かぶ解決策は次のとおりです。

  1. 初め
    • を作成web/user/user.htmlし、がアクセスさweb/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 )

このソリューションの欠点は、 -like の/user/10ような URL がまったく得られないことです。

  1. もう 1 つの方法は、次のようにレッドストーンを追加で構成することです。

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

この場合、少なくとも「/user/10」のような URL は許可されますが、これは単に機能しません。

どうすればそれを正しく行うことができますか?レッドストーンの git 上の Web アプリの例は、私の考えでは、不可解で複雑です。

これがレッドストーンまたはダーツのみに関連して説明する必要があるかどうかはわかりませんが、関連するものは見つかりません.

4

1 に答える 1

2

テンプレートエンジンを使用してサーバーでhtmlファイルを生成しようとしていると思います。Redstone は主にサービスを構築するように設計されているため、組み込みのテンプレート エンジンはありませんが、mustacheなど、pub で利用可能な任意のエンジンを使用できます。ただし、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 (まだアルファ版) には、リクエストを内部的にディスパッチするために使用できる新しい 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 ミドルウェアを使用できます。完全な Redstone + Polymer の例については、こちらを参照してください (shelf_static はbin/server.dart ファイルで構成されています)。

于 2015-03-04T15:36:38.620 に答える