因此,我尝试制作一个简单的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;
}
感谢您的帮助!