Сервер Express.js не отвечает на HTTP-запросы при использовании Socket.io - PullRequest
0 голосов
/ 25 сентября 2019

Я настроил свой проект, используя express-generator.Я добавил пару файлов с именами server.js и socketio.js, чтобы получить экземпляр сервера и экземпляр socket.io соответственно.Это код

server.js

const http = require('http');

// app.js created by express-generator
const app = require('./app');

let server = null;

module.exports = {
    get server() {
        if (!server)
            server = http.createServer(app);
        return server;
    }
};

socketio.js

const { server } = require('./server');

let io = null;

module.exports = {
    get io () {
        if (!io)
            io = require('socket.io')(server);
        return io;
    }
};

Когда я импортировалsocketio.js из bin/www созданный express-generator, сервер работает просто отлично.Он может получать запросы от клиента.

Но затем я импортировал файл из app.js, также созданный express-generator, сервер не получал никаких запросов.

Вот app.js,


const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const passport = require('passport');
const session = require('express-session');

const DBPoller = require('./realtime-db');

const indexRouter = require('./routes/index');

const app = express();

app.use(session({ secret: 'cats' }));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(
  express.urlencoded({
    extended: false
  })
);
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
  done(null, user);
});
passport.deserializeUser(function(user, done) {
  done(null, user);
});

app.use('/', indexRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

// realtime db
const { io } = require('./socketio');
io.on('connection', socket => {
  console.log('on connected');
});

function emitDBChange() {
  io.emit('temp-change', { for: 'everyone' });
}
const poller = new DBPoller();
poller.onChange(db => {
  emitDBChange();
});

module.exports = app;

Стартовый код сервера происходит в bin/www

bin / www

#!/usr/bin/env node

/**
 * Module dependencies.
 */

const app = require('../app');
const debug = require('debug')('groweb:server');

/**
 * Get port from environment and store in Express.
 */

const port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * Create HTTP server.
 */

const { server } = require('../server');
const { io } = require('../socketio');


/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

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

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  const bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;

  // handle specific listen errors with friendly messages
  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;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...