3

Rikuloストリームを使おうとしていますが、クライアントからサーバーにデータを送信したいときに問題があります。登録フォームがあり、そのユーザー名がデータベースに既に存在するかどうかを確認するリクエストを送信したいとします。私はMVCパターンを採用しているので、コントローラーがデータを受信した後、daoクラスを使用して、ユーザー名が存在するかどうかを確認します。

クライアント側には、このコード行があります

InputElement username = query('#username');
document.query("#submit").onClick.listen((e) {
  HttpRequest request = new HttpRequest();

  var url = "/check-existing-username";
  request.open("POST", url, async:true);
  request.setRequestHeader("Content-Type", "application/json");
  request.send(stringify({"user": username.value}));

});

これはデータを送信する正しい方法ですか?

ここに私のサーバー側のコード

void main(){

  Controller controller = new Controller();

  var _mapping = {
              "/": controller.home,
              "/home": controller.home,
              "/check-existing-username" : controller.checkUsername
  };

  new StreamServer(uriMapping: _mapping).start();

そして私のコントローラーメソッド

void checkUsername(HttpConnect connect) {
  //How to access data received from client?
}

daoクラスは既に定義されているので、データへのアクセス方法だけ知りたいです。

誰かが私を助けてくれることを願っています。

4

1 に答える 1

1

POST を使用しているため、JSON データは HTTP 要求の本文にあります。そこで回収できます。Rikulo CommonsにはreadAsJsonというユーティリティがあります。以下のように活用できます。

import "package:rikulo_commons/convert.dart";

Future checkUsername(HttpConnect connect) {
  return readAsJson(connect.request).then((Map<String, String> data) {
      String username = data["user"];
      //...doa...
  });
}

リクエストの本文の読み取りは非同期であるため、Future インスタンスを返して、いつ完了したかを示す必要があることに注意してください。

于 2013-09-13T11:47:23.320 に答える