startServer function

Future<void> startServer({
  1. required HttpServer server,
  2. required GrapheneQuery query,
  3. required GrapheneMutation mutations,
})

Implementation

Future<void> startServer({
  required HttpServer server,
  required GrapheneQuery query,
  required GrapheneMutation mutations,
})async{
  //URL in which the server is running
  print("http://${server.address.address}:${server.port}");
  //Handle all of the incoming requests
  await server.forEach((HttpRequest request)async{
    if(request.requestedUri.path == "/graphene" && request.method == "POST"){
      try{
        String requestBody = await utf8.decodeStream(request);
        Map<String,dynamic> parsedRequest = jsonDecode(requestBody);
        //Handle request
        dynamic responseData;
        if(parsedRequest["query"] != null){
          responseData = await compute(query.resolver[parsedRequest["query"]]!, parsedRequest["variables"] as Map<String,dynamic>);
        }else if(parsedRequest["mutation"] != null){
          responseData = await compute(mutations.resolver[parsedRequest["mutation"]]!, parsedRequest["variables"] as Map<String,dynamic>);
        }else{
          Map<String,dynamic> error = {
            "error": "No query or mutation found",
          };
          responseData = jsonEncode(error);
        }
        //Generate a response
        request.response.write(jsonEncode({
          "data": responseData,
        }));
        await request.response.close();
      }catch(err){
        Map<String,dynamic> error = {
          "error": err is String ? err : err.toString(),
        };
        request.response.write(jsonEncode(error));
        await request.response.close();
      }
    }else{
      //Return an error
      Map<String,dynamic> error = {
        "error": "Invalid Request",
      };
      request.response.write(jsonEncode(error));
      request.response.close();
    }
  });
}