首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么socket.io给我一个404错误?

为什么socket.io给我一个404错误?
EN

Stack Overflow用户
提问于 2016-04-24 15:50:58
回答 1查看 718关注 0票数 0

我基本上是试图重新创建一个简单的聊天应用程序张贴在官方网站上的socket.io。

我在content.js中创建了以下模块:

代码语言:javascript
代码运行次数:0
运行
复制
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通过以下方式调用的:

代码语言:javascript
代码运行次数:0
运行
复制
// socket.io
var server   = require('http').Server(app);
var io       = require('socket.io')(server);
require('./app/content')(app, io);

在运行该应用程序时,没有发送任何内容,并且在我的控制台中显示了以下错误:

代码语言:javascript
代码运行次数:0
运行
复制
GET /socket.io/?EIO=3&transport=polling&t=1461512892706-14 404 2.370 ms - 1097

我怎么才能解决这个问题?据我所知,它与profile.ejs的位置有关吗?一如既往地感谢你的帮助

以下是index.js:

代码语言:javascript
代码运行次数:0
运行
复制
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文件:

代码语言:javascript
代码运行次数:0
运行
复制
#!/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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-24 16:07:00

您似乎正在创建两个单独的服务器,一个在www文件中使用:

代码语言:javascript
代码运行次数:0
运行
复制
var server = http.createServer(app);

另外,在index.js中的另一个有:

代码语言:javascript
代码运行次数:0
运行
复制
var server = require('http').Server(app);

您永远不会启动在index.js中创建的一个,这就是socket.io连接到的那个,这就是为什么您没有任何socket.io功能。您绑定socket.io的服务器从未启动。

您正在启动您的www文件,但它没有连接到它的socket.io。

您需要创建一个服务器和一个服务器,并且该服务器是Express和socket.io绑定到的服务器。然后你需要启动那台服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36825432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档