2016-04-24 11 views
0

私は基本的にsocket.ioの公式サイトに投稿された簡単なチャットアプリケーションを再作成しようとしています。socket.ioが私に404エラーを出すのはなぜですか?

私はcontent.jsで、次のモジュールを作成:私はこれを通じてindex.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; 
    }; 

を:

// 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'を表示してください。 'app'の定義方法とサーバーの起動方法を見ておく必要があります。また、 'content'.jsの' router'と 'app'変数を使用していないので、混乱の可能性があります。 – jfriend00

+0

@ jfriend00返信ありがとう、index.jsを掲示するために私の答えを更新しました – abedzantout

+0

あなたのサーバーを実際にどこで起動しているのか分かりません。 – jfriend00

答えて

0

あなたの2台の別々のサーバ、1つを作成していることが表示されますあなたのwwwを持つファイル:

var server = http.createServer(app); 

そして、内の別のはで:

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

あなたは決してindex.jsで作成されたものを始めていません、それはあなたがどんなsocket.ioの機能を持っていない理由ですへのように接続されてsocket.io一つです。 socket.ioをバインドしたサーバーは起動されませんでした。

wwwファイルを起動していますが、socket.ioは接続されていません。

1つのサーバーと1つのサーバーを作成し、Expressとsocket.ioがバインドされているサーバーにする必要があります。そして、そのサーバーを起動する必要があります。

+0

wwwファイルやindex.jsを更新する方が良いと思いますか? – abedzantout

+0

@ Predator44 - 正直言って、あなたが今までに示したモジュールのレイアウトは、あなたが全体的にしようとしていることに従うのはあまりにも複雑すぎます。 'index.js'のように見えるのは、あなたのサーバーを設定するのがどこにあるのでしょうか?おそらくどこにそれを作成して起動すればいいのでしょうか?私は50,000フィートのビューを持っているようには感じませんなぜあなたが 'www'ファイルを持っているのかを全体的に、あるいは本当に理解しようとしています。 – jfriend00

+0

wwwファイルを削除してindex.jsを更新しようとします。wwwは、明示的なアプリケーションジェネレータによって作成され、私はそれ以来、本当に触れていません。 – abedzantout

関連する問題