Dart服务器处理不同的请求

时间:2018-12-03 12:30:36

标签: dart

因此,我尝试制作一个简单的Dart服务器应用程序来处理两个不同的请求,但是在遵循Dart教程之后,我创建了以下客户端来测试连接的服务器。 但是,我不了解如何处理两个单独的请求,我是否应该获取uri并根据该请求进行处理? 下面的代码不起作用,我希望对任何原因有任何了解。

import 'dart:io';
import 'dart:convert';

String _host = InternetAddress.loopbackIPv4.host;

Future main() async {
  print ('starting server');
  var server = await HttpServer.bind(_host, 4049);
  await for (var req in server) {
    ContentType contentType = req.headers.contentType;
    HttpResponse response = req.response;
    print ('request in');
    if (req.method == 'POST' &&
        contentType?.mimeType == 'application/json'
        && req.requestedUri.path == '/verifyphone/') {
      try {
        String phone2verify = req.uri.queryParameters['num'];
        print ('verifying ${phone2verify}');
        if(phone2verify == '18616777438'){
          response
          ..statusCode = HttpStatus.ok
          ..write('allowed');
        }
        else {
          response
          ..statusCode = HttpStatus.ok
          ..write('NotAllowed');
        }
      } catch (e) {
        response
          ..statusCode = HttpStatus.internalServerError
          ..write("Error Parsing");
      }
    } 
    if (req.method == 'POST' &&
        contentType?.mimeType == 'application/json'
        && req.requestedUri.path == '/makeBooking/') {
      try {
        print('making booking');
        String content =
            await req.transform(utf8.decoder).join();
        var data = jsonDecode(content) as Map;
        var fileName = req.uri.pathSegments.last;

        await File(fileName)
            .writeAsString(content, mode: FileMode.write);
        req.response
          ..statusCode = HttpStatus.ok
          ..write('Wrote data for ${data['name']}.');
      } catch (e) {
        response
          ..statusCode = HttpStatus.internalServerError
          ..write("Exception during file I/O: $e.");
      }
    } 
    else {
      response
        ..statusCode = HttpStatus.methodNotAllowed
        ..write("Unsupported request: ${req.method}.");
    }
    response.close();
  }
}

和我的测试客户端

import 'dart:io';
import 'dart:convert';
HttpClient client = HttpClient();

String _host = InternetAddress.loopbackIPv4.host;
String action = '';

Map bookingReqJson = {
  'DateTime': '2018:12:25:13:00',
  'machine': '3dp1',
  'durationMins': '120',
  'bookingPhone': '18616777438',
};

main() {
  while (true)
  {
    print ("input function to test");
    String command = stdin.readLineSync();
    if (command == "1")
    {
      checkPhoneNumber(123456, "1");
    }
    if (command == "2")
    {
      checkPhoneNumber(12345, "2"); 
    }
    if (command == "3")
    {
      checkPhoneNumber(123456, "2"); 
    }
  }
}


Future<String> makeBooking() async {
  HttpClientRequest request = await HttpClient().post(_host, 4049, action)
    ..headers.contentType = ContentType.json 
    ..write(jsonEncode(bookingReqJson));
  HttpClientResponse response = await request.close();
  await response.transform(utf8.decoder).forEach(print);
}

Future<bool> checkPhoneNumber(int phoneNumber, String MachineID) async {
  bool allowed = false;
  var URL = _host; // + '/verifyphone/';
  print ("URL is ${URL}");
  HttpClientRequest request =
      await client.get(URL, 4049, '/?num=$phoneNumber,wantsToBook=$MachineID');
  print('number to check is $phoneNumber. To see if he can $MachineID');
  HttpClientResponse response = await request.close();
  if (response.statusCode == HttpStatus.ok) {
    var contents = await response.transform(utf8.decoder).join();
    if (contents.startsWith('allowed')) {
      allowed = true;
      client.close();
      print('he is allowed');
    } else {
      print('nope not allowed');
    }
  }
  return allowed;
}

感谢您的帮助!

0 个答案:

没有答案
相关问题