2016-04-24 5 views
0

Я в основном пытаюсь воссоздать приложение простого чата, размещенное на официальном сайте socket.io.Почему socket.io дает мне ошибку 404?

Я создал следующий модуль в 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); 
} 
+0

Пожалуйста, покажите нам остаток 'index.js'. Нам нужно посмотреть, как вы определяете «приложение» и как вы запускаете свой сервер. Кроме того, избавляйтесь от переменных 'router' и' app' в 'content.js', поскольку вы их не используете, и это всего лишь точка возможной путаницы. – jfriend00

+0

@ jfriend00 спасибо за ответ, я обновил свой ответ на пост index.js – abedzantout

+0

Я не вижу, где вы на самом деле начинаете свой сервер. – jfriend00

ответ

0

Похоже, что вы создаете два отдельных сервера, один в ваш файл 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. И тогда вам нужно запустить этот сервер.

+0

Как вы думаете, это лучший подход к обновлению www-файла или index.js? – abedzantout

+0

@ Predator44 - Честно говоря, макет модуля, который вы показали до сих пор, выглядит слишком сложным для меня, чтобы следить за тем, что вы пытаетесь сделать в целом. Мне кажется, что 'index.js' - это то, где мясо для настройки вашего сервера - это то, что, вероятно, вы должны его создать и запустить, но я не чувствую, что у меня есть вид на 50 000 футов, что вы пытаясь сделать вообще или даже действительно понять, почему у вас есть файл 'www'. – jfriend00

+0

Я просто удалю файл www и попытаюсь обновить index.js.www был создан генератором экспресс-приложений, и с тех пор я его не трогал. – abedzantout

Смежные вопросы