title: Error [ERR_STREAM_WRITE_AFTER_END]: write after end [npm-request with socket.io]
body: <p>On my server side I have socket server listening and in my own laptop I have socket.io-client service and whenever I turn on both they are connecting. </p>
  
  <p>And when other people request to my server, server sends that request via socket to my laptop and my laptop gets data from localhost using npm-request and gives back the returned data to the server then server show that information to the client.</p>
  
  <p><strong><em>And here is the error on my server side:</em></strong><br>
  </p>
  
  <pre><code>/*
  
  throw er; // Unhandled 'error' event
        ^
  
  **Error [ERR_STREAM_WRITE_AFTER_END]: write after end**
      at write_ (_http_outgoing.js:572:17)
      at ServerResponse.write (_http_outgoing.js:567:10)
      at Socket.&lt;anonymous&gt; (/public_html/api/index.js:37:9)
      at Socket.emit (events.js:187:15)
      at /public_html/api/node_modules/socket.io/lib/socket.js:528:12
      at process._tickCallback (internal/process/next_tick.js:61:11)
  Emitted 'error' event at:
      at writeAfterEndNT (_http_outgoing.js:634:7)
      at process._tickCallback (internal/process/next_tick.js:63:19)
  
      */
  </code></pre>
  
  
  
  <p><strong><em>server side code:</em></strong></p>
  
  <pre class="lang-js prettyprint-override"><code>var http = require('http');
  var fs = require('fs');
  var socket_g=null, numOfUsers=0;
  var url = require('url'),qs = require('querystring');
  
  var server = http.createServer(function(req, res) {
      if(numOfUsers!=0){
            var urlParts = url.parse(req.url, true),
           urlParams = urlParts.query, 
           urlPathname = urlParts.pathname,
           body = '',
           reqInfo = {};
  
            req.on('data', function (data) {
              body += data; 
            });
  
            req.on('end', function () {
              reqInfo.urlPathname = urlPathname; 
              reqInfo.urlParams = urlParams; 
              reqInfo.body = qs.parse(body); 
              reqInfo.urlParts = urlParts;
              console.log(reqInfo.urlPathname)
                socket_g.emit('event', { "path": reqInfo.urlPathname});
            });
  
          socket_g.on('data',function(data){
                console.log(data.c)
                if(data.c=='application/x-httpd-php' || data.c=='/'){
                      res.writeHead(200, { 'Content-Type': 'text/html' });
                      res.write(data.data);
                      res.end();
                }else{
                      res.writeHead(200, { 'Content-Type': data.c });
                      res.write(data.data);
                      res.end();
                }         
          });
      }else{
          res.writeHead(200, { 'Content-Type': 'text/html' });
              res.end("&lt;h2&gt;There is no client connected!&lt;/h2&gt;");
      }
  });
  
  var io = require('socket.io').listen(server);
  io.sockets.setMaxListeners(0);
  
  io.sockets.on('connection', function (socket) {
      /*console msg*/
      console.log('user connected!');
      /*console msg*/
      socket.setMaxListeners(0);
      numOfUsers++;
      socket_g=socket;
      socket.on('disconnect', function(){
          numOfUsers++;
          /*console msg*/
          console.log('user disconnected');
          /*console msg*/
      });
  });
  
  
  server.listen(3333);
  </code></pre>
  
  
  
  <blockquote>
    <p>And belove my client side code, which is working on my laptop</p>
  </blockquote>
  
  <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false">
  <div class="snippet-code">
  <pre class="snippet-code-js lang-js prettyprint-override"><code>var socket = require('socket.io-client')('http://*.*.*.*:3333/');
  var http=require("http");
  var r = require('request');
  var mime = require('mime');
  var path = require('path');
  
  socket.on('connect', function(){
   console.log("connected");
  });
  
  socket.on('event', function(data){
   console.log(mime.getType(path.extname(data.path).substr(1)));
   var contentType=mime.getType(path.extname(data.path).substr(1));
  
    r.get({url: "http://localhost/check"+data.path},
    function(error, response, body){
       //console.log(body);
       if(contentType){
        socket.emit('data', { "data": body,'c':contentType });
       }
   });
  
  });
  
  socket.on('disconnect', function(){
   console.log("disconnected")
  });</code></pre>
  </div>
  </div>
  </p>