2017-12-01 1 views
0

나는 모두를 찾았으나 찾을 수있는 것은 socket.io를 사용하는 기본적인 방법입니다. 내 경로 중 하나에서 socket.io를 사용하려하지만 기울이지 않습니다. express, node.js 및 jade를 사용하고 있습니다. 내 문제는 다른 경로에서 io 변수 형식 app.j에 액세스 할 수 없다는 것입니다. 매번 전화를해야만하는지 모르겠다. 또한 내 보낸 app.js 모듈을 다시 보려고하면 app.j를 찾을 수 없다고 표시됩니다.경로에서 작동하지 않는 Socet.io

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 app = express(); 
//SOCKET/I/o 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
var port = process.env.PORT || 3000; 
// 
var login = require('./routes/login'); 
var index = require('./routes/index'); 
var users = require('./routes/users'); 
var news = require('./routes/news'); 

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

// uncomment after placing your favicon in /public 
// TODO Not sure if this is working 
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'))); 
app.use('/', login); 
app.use('/index',index); 
app.use('/users', users); 
app.use('/news',news); 

// 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 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'); 
}); 
module.exports = app; 

/routes/login.js

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



router.get('/', function(req, res, next) { 
res.render('login'); 

}); 

io.on('connection', function (socket) { 
socket.emit('news', { hello: 'world' }); 
socket.on('my other event', function (data) { 
    console.log(data); 
}); 
}); 
module.exports = router; 

/views/login.jade 단일 페이지를 실행하지 않는 것처럼

doctype html 
html  
head 
    title login 
    link(rel='stylesheet', href='/stylesheets/main.css') 

body 
    input(type="email",placeholder="email",id="userEmail") 
    input(type="password",placeholder="password",id="userPassword") 
script(src="https://cdn.socket.io/socket.io-1.2.0.js") 
script. 
    socket.on('connection', function (data) { 
     console.log(data); 
     socket.emit('my other event', {my: 'data'}); 
    }); 
button(onclick='signin()') Sign In 
button(onclick='signup()') Sign Up 

답변

0

을 app.js -app에 html-router를 사용하면 Socket.io 인스턴스는 첫 번째 경로에서만 초기화되므로 모든 경로에 대해이 작업을 수행해야합니다.

var socket = io() 
socket.on('connection', function (data) { 
    console.log(data); 
    socket.emit('my other event', {my: 'data'}); 
}); 

그 때만 작동합니다.

관련 문제