title: Node.js - req.on("data") in POST is never called even though req.body is not empty
body: <p>I'm doing the following : </p>
  
  <pre><code>......
  ....
  app.use(cookieParser());
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({  
    extended: true 
  })); 
  
  app.use('/public', express.static(__dirname + '/public'));
  
  app.post('/uninstalled', function (req, res, next)
  {     
    var bodyAsQueryString = queryString.stringify(req.body);
    console.log('bodyAsQueryString = ' + bodyAsQueryString);
  
    var hmacReceived = req.headers['x-shopify-hmac-sha256'];
    var calculatedHmac = crypto.createHmac('SHA256', config.app.secret);
  
    req.on("data", function(data) 
    {
       console.log('on data...');
       calculatedHmac.update(data);
    });
  
    req.on("end", function() 
    {
       console.log('on end...');
       calculatedHmac = calculatedHmac.digest("base64");
       console.log('hmacReceived = ' + hmacReceived);
       console.log('calculatedHmac = ' + calculatedHmac);
    });
  
    req.on("error", function(err) 
    {
       console.log('on error...');
       console.log(err);
       return next(err);
    });
  });
  </code></pre>
  
  <p>None of the above <code>req.on("...")</code> is ever called (nothing is console-logged...) - What am I doing wrong ?</p>
  
  <p>The value of <code>bodyAsQueryString</code> always looks smth like the following (I've replaced personal data with <code>xxxxx</code>) :</p>
  
  <blockquote>
    <p>id=xxxxx&amp;name=xxxxx&amp;email=xxxxxx&amp;domain=xxxxxxx&amp;created_at=2015-03-21T00%3A31%3A36%2B00%3A00&amp;province=&amp;country=GB&amp;address1=xxxxxxxxx&amp;zip=E59JY&amp;city=London&amp;source=xxxx&amp;phone=xxxxxx&amp;updated_at=2015-08-19T15%3A12%3A31%2B01%3A00&amp;customer_email=&amp;latitude=xxxxx&amp;longitude=-xxxxxx&amp;primary_location_id=&amp;primary_locale=en&amp;country_code=GB&amp;country_name=United%20Kingdom&amp;currency=USD&amp;timezone=(GMT%2B00%3A00)%20Europe%2FLondon&amp;iana_timezone=Europe%2FLondon&amp;shop_owner=xxxxxx&amp;money_format=%24%20%7B%7Bamount%7D%7D&amp;money_with_currency_format=%24%20%7B%7Bamount%7D%7D%20USD&amp;province_code=&amp;taxes_included=false&amp;tax_shipping=&amp;county_taxes=true&amp;plan_display_name=affiliate&amp;plan_name=affiliate&amp;myshopify_domain=xxxxxx.myshopify.com&amp;google_apps_domain=&amp;google_apps_login_enabled=&amp;money_in_emails_format=%24%7B%7Bamount%7D%7D&amp;money_with_currency_in_emails_format=%24%7B%7Bamount%7D%7D%20USD&amp;eligible_for_payments=false&amp;requires_extra_payments_agreement=false&amp;password_enabled=true&amp;has_storefront=true&amp;setup_required=false</p>
  </blockquote>