1

Dartでお問い合わせフォームを作成しようとしています。これまでのところ、サーバーには次のようなものを含める必要があることを理解できます。

サーバ

app.addRequestHandler(
  (req) => req.method == 'POST' && req.path == '/adduser',
    (req, res) {
      //process json data
    };
  }
);

そしてクライアントのためのフォーム:

<form method="post" action="/adduser">
  <fieldset>
    <legend>Add a user</legend>
    <p><label>First name</label>
    <input name="user[first_name]"/></p>

    <p><label>Email</label>
    <input name="user[email]"/></p>

    <p class="actions"><input type="submit" value="Save"/></p>
  </fieldset>
</form>

jsonデータをサーバー側に取得するには、クライアント側で何をする必要がありますか?

フォームを処理するためにjsonが必要ですか、それともより良い方法がありますか?

4

1 に答える 1

2

formサーバーに直接送信できます。コンテンツは、リクエストの本文でURL エンコードされて送信されます。サーバーでは、 pub で利用可能なパッケージpostを使用してデータをデコードできます。query_string

pubspec.yaml ファイルに追加query_stringします。

dependencies:
  query_string: ">=1.0.0 <2.0.0"

サーバー コードは次のようになります。

import 'dart:io';
import 'package:query_string/query_string.dart';

main() {
  final server = new HttpServer();
  server.listen('127.0.0.1', 8081);
  server.addRequestHandler((req) => req.method.toUpperCase() == 'POST' 
      && req.path == '/adduser', (request, response) {
    readStreamAsString(request.inputStream).then((body) {
      final params = QueryString.parse("?${body}");
      print(params["user[first_name]"]);
      print(params["user[email]"]);
      response.statusCode = HttpStatus.CREATED;
      response.contentLength = 0;
      response.outputStream.close();
    });
  });
}

Future<String> readStreamAsString(InputStream stream) {
  final completer = new Completer();
  final sb = new StringBuffer();
  final sis = new StringInputStream(stream);
  sis
    ..onData = () { sb.add(sis.read()); }
    ..onClosed = () { completer.complete(sb.toString()); }
    ..onError = (e) { completer.completeException(e); };
  return completer.future;
}
于 2012-11-30T17:40:16.057 に答える