Экспресс-сервер nodejs неожиданно останавливается - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть сервер, построенный с IO экспресс и сокета.Проблема в том, что каждый раз, когда сервер просто перестает отвечать на запросы через 2 минуты после первого подключения клиента.Вещи, которые я уже сделал / проверил:

  • Экспресс-журналы не показывают ошибок.
  • socket.IO Журналы не показывают ошибок на стороне сервера.
  • socket.IO журналыпоказать тайм-аут пинга на стороне клиента (после нескольких успешных пингов).
  • Прослушивание uncaughtException / UnhandeledRejection не помогает.

Итак, когда я запускаю сервер и получаю GET/ войти через браузер, ничего не делая, сервер перестанет отвечать самостоятельно через ~ 2 минуты, и единственный способ закрыть его - закрыть cmd (CTRL + C не работает даже после прослушивания SIGINT).

Я выложу соответствующие части кода здесь:

server.js

const http = require('http');
const express = require('express');
const socketIO = require('socket.io');
let app = express();
let server = http.createServer(app);
var io = socketIO(server);

app.get(`/login`, (req, res) => {
    console.log(`got GET /login`);
    res.sendFile(publicPath + '/login.html');
});

io.on(`connection`, (socket) => {
    socket.on(`login`, async (details, cb) => {
      login(details.username, details.password, async (res) => {
        if (res === true) {
          let user = new User(details.username, details.password);
          let token = await user.generateAuthToken();

          cb(`/set?token=${token}`);
        } else if (res === false) {
          socket.emit(`loginFailed`, 'Password incorrect. Please try again!')
        } else if (res === `Username doesn't exist`) {
          socket.emit(`loginFailed`, res)
        }
      });
    });

    socket.on('getAllLeads', async (callback) => {
      leads = await getAllLeads();
      callback(leads);
    });

    socket.on('getSomeLeads', async (options, callback) => {
      leads = await getSomeLeads(options);
      callback(leads);
    });

    socket.on(`newFile`, ({text, words, options, fileName}) => {
      console.log('Starting...');
      words.forEach((wordSet, index) => {
        wordSet.forEach(word => {
          regexp = `\\s+${word}+\\s`;
          re = new RegExp(regexp);
          text = text.replace(re, `${options[index]}`);
      });
    });
    fs.writeFileSync(`${fileName}.txt`, text, 'utf8');
    console.log(`Finished writing to ${fileName}.txt successfully!`);
  });
});

server.listen(3000, () => {
      console.log(chalk.yellow(`Server is up on port ${port}`));
});

login.js

const socket = io();

socket.on(`reconnect_error`, (err) => {
  console.log(err);
});

socket.on(`connect`, () => {
  console.log('connected to login page');
  if (getQueryVariable('failed')) {
    $('.error, .error p').css('opacity', 1);
    $('.error p').text('Unauthorized! PLEASE log in.');
  }

  socket.on(`loginFailed`, (reason) => {
    $('.error, .error p').css('opacity', 1);
    $('.error p').text(reason);
    console.log(`got login failed`);
  });

  $('#form').submit((e) => {
    e.preventDefault();

    let username = $('#username').val();
    let password = $('#pass').val();

    socket.emit(`login`, {username, password}, (path) => {
      window.location.href = path;
    });
  });
});

function getQueryVariable(variable)
{
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
          var pair = vars[i].split("=");
          if (pair[0] == variable) return pair[1];
  }
  return (false);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...