Мой Node.js Сбой прокси-сервера HTTP при исключении connResetException

#node.js #node-http-proxy

Вопрос:

Я реализовал приложение HTTP-прокси-сервера в Node.js, используя http-proxy модуль.

Иногда приложение выходит из строя, и, согласно файлу журнала, похоже, что это вызвано исключением сброса соединения, вызванным модулем http-прокси

Логайл:

 2021-11-01T12:50:57.006759 00:00 heroku[web.1]: Process exited with status 1 2021-11-01T12:50:57.046446 00:00 heroku[web.1]: State changed from up to crashed 2021-11-01T12:50:56.840974 00:00 app[web.1]: /app/node_modules/http-proxy/lib/http-proxy/index.js:120 2021-11-01T12:50:56.840981 00:00 app[web.1]: throw err; 2021-11-01T12:50:56.840982 00:00 app[web.1]: ^ 2021-11-01T12:50:56.840982 00:00 app[web.1]:  2021-11-01T12:50:56.840983 00:00 app[web.1]: Error: socket hang up 2021-11-01T12:50:56.840983 00:00 app[web.1]: at connResetException (internal/errors.js:609:14) 2021-11-01T12:50:56.840983 00:00 app[web.1]: at TLSSocket.socketCloseListener (_http_client.js:401:25) 2021-11-01T12:50:56.840984 00:00 app[web.1]: at TLSSocket.emit (events.js:326:22) 2021-11-01T12:50:56.840984 00:00 app[web.1]: at net.js:675:12 2021-11-01T12:50:56.840985 00:00 app[web.1]: at TCP.done (_tls_wrap.js:568:7) { 2021-11-01T12:50:56.840985 00:00 app[web.1]: code: 'ECONNRESET' 2021-11-01T12:50:56.840985 00:00 app[web.1]: } 2021-11-01T12:50:56.849770 00:00 app[web.1]: npm ERR! code ELIFECYCLE 2021-11-01T12:50:56.849910 00:00 app[web.1]: npm ERR! errno 1 2021-11-01T12:50:56.852684 00:00 app[web.1]: npm ERR! dexautheu@1.0.0 start: `node dexAuthEU.js` 2021-11-01T12:50:56.852724 00:00 app[web.1]: npm ERR! Exit status 1 2021-11-01T12:50:56.852780 00:00 app[web.1]: npm ERR!  2021-11-01T12:50:56.852819 00:00 app[web.1]: npm ERR! Failed at the dexautheu@1.0.0 start script. 2021-11-01T12:50:56.852853 00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above. 2021-11-01T12:50:56.861038 00:00 app[web.1]:  2021-11-01T12:50:56.861180 00:00 app[web.1]: npm ERR! A complete log of this run can be found in: 2021-11-01T12:50:56.861228 00:00 app[web.1]: npm ERR! /app/.npm/_logs/2021-11-01T12_50_56_853Z-debug.log   

Я совсем новичок в java-скрипте, но я знаю, что мне нужно поймать это исключение в своем коде и обработать его, но проблема в том, что я действительно не знаю, где в моем приложении я должен его разместить. Я уже использую try/catch для обработки исключений из анализатора JSON. Вот пример моего приложения:

 var httpProxy = require('http-proxy'); const port = process.env.PORT;  var proxy = httpProxy.createServer({    target: 'lt;target-servergt;',  secure: false,  followRedirects: true,  autoRewrite: true,  changeOrigin: true,  selfHandleResponse: true }).listen(port, function() {  console.log(`Server running on port ${port}`);  });   proxy.on('proxyReq', function(proxyReq, req, res, options) {  var Account = '';  Account = proxyReq.getHeader('account');  console.log('Request from: ', Account);  });   proxy.on('proxyRes', function (proxyRes, req, res) {    var body = '';  var response = '';  proxyRes.on('data', function (chunk) {  body  = chunk;  });  proxyRes.on('end', function () {    try {  response = JSON.parse(body);  if (response.hasOwnProperty('Code')) {  console.log('Error Message: ', JSON.stringify(response['Code']));  if (response['Code'] == 'SSO_AuthenticateAccountNotFound' || response['Code'] == 'SSO_AuthenticatePasswordInvalid') {  res.writeHead(401);  res.end(JSON.stringify({SessionID: '', ErrorMsg : response['Code'], ErrorCode : 401}));  }  } else {   console.log('SessionID: ', response);  res.end(JSON.stringify({SessionID : response, ErrorMsg : 'OK', ErrorCode: 200}));  }    }  catch (error) {  console.log('JSON error: ' , error);     }    });  });   

I saw an example somewhere in which they defined the error handling here:

 var proxy = httpProxy.createServer({    target: 'lt;target-servergt;',  secure: false,  followRedirects: true,  autoRewrite: true,  changeOrigin: true,  selfHandleResponse: true  }).listen(port, function(err) {  if (err) {  console.log('Error serving https proxy request: %s', req);  }  console.log(`Server running on port ${port}`);  });  

Будет ли это подходящим решением? Или у меня должна быть другая стратегия? Заранее спасибо.