簡體   English   中英

為什么socket.io給我一個404錯誤?

[英]Why is socket.io giving me a 404 error?

我基本上是想重新創建發布在socket.io官方網站上的簡單聊天應用程序。

我在content.js中創建了以下模塊:

var app = require('express');
var router  = app.Router();

    module.exports = function(app, io) {

        app.get('/profile',function(req, res){
            res.render('profile.ejs');
        });
        io.on('connection', function(socket){
            socket.on('chat message', function(msg){
                io.emit('chat message', msg);
            });
        });
        return router;
    };

我通過這個從index.js調用它:

// socket.io
var server   = require('http').Server(app);
var io       = require('socket.io')(server);
require('./app/content')(app, io);

在運行應用程序時,未發送任何內容,並且控制台中顯示以下錯誤:

GET /socket.io/?EIO=3&transport=polling&t=1461512892706-14 404 2.370 ms - 1097

我怎樣才能解決這個問題? 據我看,它與profile.ejs的位置有關? 一如既往的感謝您的幫助

這是index.js:

var express         = require('express')
var path            = require('path');
var favicon         = require('serve-favicon');
var logger          = require('morgan');
var cookieParser    = require('cookie-parser');
var bodyParser      = require('body-parser');
var passport        = require('passport');
var flash           = require('connect-flash');
var session         = require('express-session');
var routes          = require('./routes/index');
var morgan          = require('morgan');
var users           = require('./routes/users');
var home            = require('./routes/home');
var mysql           = require('mysql');
var helmet          = require('helmet');
var app             = express();


// socket.io
var server   = require('http').Server(app);
var io       = require('socket.io')(server);


require('./config/passport')(passport); // pass passport for configuration
app.use(morgan('dev')); // log every request to the console


app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());


var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'mysql',
    database: 'clearreview'
});
connection.connect();

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

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// security measure against xss attacks
app.use(helmet.xssFilter());
// hide powered by express
app.use(helmet.hidePoweredBy());
// security measure against sniffing
app.use(helmet.noSniff());


app.use('/', routes);



// required for passport
app.use(session({
    secret: 'vidyapathaisalwaysrunning',
    resave: true,
    saveUninitialized: true
})); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session


// routes ======================================================================
//require('./app/cr-auth-routes.js')(app, passport); // load our routes and pass in our app and fully configured passport
require('./app/cr-auth-routes')(app, passport);
require('./app/search.js')(app, connection);
require('./app/content')(app, io);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});
module.exports = app;

啟動服務器的www文件:

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('clear-review:server');
var http = require('http');

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

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

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * 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) {
  var 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;
  }

  var 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() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

看來您正在創建兩個單獨的服務器,其中一個在www文件中,其中包含:

var server = http.createServer(app);

並且, index.js另一個具有:

var server = require('http').Server(app);

您永遠不會開始在index.js創建的那一個,那是socket.io連接到的那個,因此這就是為什么您沒有任何socket.io功能的原因。 您將socket.io綁定到的服務器從未啟動。

您正在啟動一個www文件,但該文件未連接socket.io。

您只需要創建一台服務器,而僅創建一台服務器,並將其作為Express和socket.io綁定的服務器即可。 並且,然后您需要啟動該服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM