constructor(req) {
    this.req = req;
    this.url = req.url;
    this.method = req.method;
    this.headers = req.headers;
    this.timeout = req.timeout;
    this.name = req.name;
    /**
     * We automatically parse the JSON body if the content type is JSON
     * This is to make it easier for the user to access the body directly
     * 
     * It must be noted that the request data is always a string and is what gets sent over the network
     * If the user wants to access the raw data, they can use getBody({raw: true}) method 
     */
    const isJson = this.hasJSONContentType(this.req.headers);
    if (isJson) {
      this.body = this.__safeParseJSON(req.data);
    }
  }
The following properties are available as shorthand:
- req.url
- req.method
- req.headers
- req.timeout
- req.body

Above shorthands are useful for accessing the request properties directly in the scripts
It must be noted that the user cannot set these properties directly.
They should use the respective setter methods to set these properties.