套接字挂起后,nodejs api无法正常工作并自动解决

时间:2018-10-22 12:17:19

标签: javascript node.js rest pm2

Nodejs api在套接字挂起后无法正常工作并自动解决。我还在发送响应时添加了res.end() 在请求中还添加了connection:close标头,以便告诉服务器在发送响应后关闭连接。此错误发生 UNCEREMONIOUS ,并会自动解决,但会阻止某些尾随的api。

#!/usr/bin/env node
var app = require('../app');
var debug = require('debug')('rkdemo:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server =http.createServer(app,function (req, res) {
 if (req.url !== 'favicon.ico') {
      console.log(':' + req.url, req.method)
      req.on('data', function (data) {
          console.log("Server Started");
          console.log('data' + data);
          res.end('post');
      });
      if (req.method.toUpperCase() == 'GET')
          res.end('get');
  } else {
      res.end('NOT FOUND');
  }
}).listen(port);
 server.on('error', onError);
server.on('listening', onListening);

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
     return val;
  }

  if (port >= 0) {
    return port;
  }
   return false;
}

function onError(error) {
  console.error('error occurred.')
  if (error.syscall !== 'listen') {
    throw error;
  }
  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    case 'ECONNRESET':  
      console.error('Time out error occurred.');
      break;
    case 'ETIMEDOUT':  
      console.error('Time out error occurred.');
      break;  
    default:
    console.error(error.stack +'error occurred');
      break;
  }
}

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

0 个答案:

没有答案