title: Stream Rest API HTTP Response in Node.js & Express
body: <p>I am creating a Rest API in Node.js and Express. It connects with remote HANA database &amp; execute one query. Now I want to stream HTTP response so that I can send it to browser into chunks, rather than sending it completely since it's a very large data.</p>
  
  <p>I tried something which is giving me no output. I don't know the reason. If I send the complete response to browser using response.send (data), it's working fine. But streaming is now working.</p>
  
  <p>I have added code snippet below.</p>
  
  <pre><code>const express = require("express");
  const APP = express();
  const HANA_DB = require('hdb');
  const BODY_PARSER = require("body-parser");
  
  start();
  
  function start() {
      startServer();
      initializeExpress();
      APP.get("/data", function(request, response) {
          var connection = HANA_DB.createClient({
              host     : "hostname",
              port     : "port",
              user     : "username",
              password : "password"
          });
          connection.on('error', function (error) {
              console.log("Error in database connection...");
          });
          connection.connect(function (error) {
              if (error) {
                  console.log("Error in database connection...");
                  return;
              }
              var query = "SELECT * FROM TableName";
              connection.exec(query, function(error, result) {
                  if(error) {
                      response.send("Getting error while fetching result...");
                      return;
                  }
                  //response.send(data);
                  var datalength = 0;
                  request.on('data', function(chunk) {
                      datalength += chunk.length;
                      console.log("DATA EVENT: " + datalength);
                      response.send(datalength);
                  })
                  .on('end', function() {
                      console.log("END EVENT: " + datalength);
                      response.send(datalength);
                  });
              });
          });     
      });
  };
  
  function initializeExpress() {
      APP.all('/*', function(request, response, next) {
          response.header("Access-Control-Allow-Origin", "*");
          response.header("Access-Control-Allow-Headers", "X-Requested-With");
          response.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
          response.header('Access-Control-Allow-Headers', 'Content-Type');
          next();
      });
      APP.use(BODY_PARSER.json());
      APP.use(BODY_PARSER.urlencoded({ extended: true }));
  };
  
  function startServer(config) {
      var server = APP.listen("8081", function(error) {
          if(error) {
              console.log("Unable to connect to 127.0.0.1:8081");
              return;
          }
          console.log("Server is listening at - 127.0.0.1:8081");
      });
  };
  </code></pre>