2017-12-22 12 views
0

소켓 JS를 사용하여 노드 JS에서 프론트 엔드로 메시지를 전달하려고합니다. 그러나 메시지는 전송되지 않습니다.소켓 메시지를 ejs로 가져올 수 없습니다

var express = require('express'); 
var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
const path = require('path'); 
const PORT = process.env.PORT || 5000; 

io.on('connection', function(socket){ 
    io.emit('order', "Order Updated"); 
    console.log("Order Updated"); 
}); 

app.use(express.static(path.join(__dirname, 'public'))) 
    .set('views', path.join(__dirname, 'views')) 
    .set('view engine', 'ejs') 
    .get('/', (req, res) => res.render('pages/index')); 

http.listen(PORT, function(){ 
    console.log('listening on *:' + PORT); 
}); 

콘솔 로그는 Order Updated으로 인쇄됩니다. index.ejs 파일에 다음 코드가 있으며 UI에 콘솔 로그가 표시되지 않습니다.

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
<script src="https://code.jquery.com/jquery-1.11.1.js"></script> 
<script> 
    $(function() { 
    var socket = io(); 
    socket.on('order', function(msg){ 
     console.log(msg); 
     window.scrollTo(0, document.body.scrollHeight); 
    }); 
    }); 
</script> 

업데이트 1

다음과 같은 답변을 바탕으로, 나는에 코드를 업데이트 :

io.on('connection', function(socket) { 
    socket.emit('order', "Order Updated"); 
}); 

업데이트 2

$(function() { 
var socket = io.connect('http://127.0.0.1:5000', {transports ['polling']}); 
    socket.on('order', function(msg) { 
     console.log(msg); 
    }); 
}); 

서버 측 콘솔의 이미지 통나무 : enter image description here

답변

1

어쩌면 서버 측에서 이와 같이 연결된 소켓을 방출해야합니까? 이 같은 포트를하고, 제대로

var socket = io.connect('http://127.0.0.1:5000', {transports: ['polling']}); 
socket.on('order', function(msg) { 
    console.log(msg); 
} 

편집 2

에서 작동 : 내 클라이언트 측에서 편집

io.on('connection', function(socket){ 
    socket.emit('order', "Order Updated"); 
    console.log("Order Updated"); 
}); 

, 나는 호스트와 연결 해요 내 index.html (클라이언트 쪽), 나는 또한이 같은 socket.io 전화 :

<script src="/socket.io/socket.io.js"></script> <!-- directly get from Node.js server --> 

희망이 있습니다.

+0

업데이트했지만 UI에 전달되는 데이터가 표시되지 않습니다. 제가 누락 된 것이 있습니까? –

+0

내 편집과 같이 전체 호스트 : 포트로 연결해야합니까? – Sparw

+0

나는 그것을 시도했다, 아직도 운이 없다. –

0

만 연결된 소켓에 방출해야합니다

io.on('connection', function(socket) { 
    socket.emit('order', 'Order Updated'); 
}); 

그렇지 않으면 당신은 당신이 원하는 아마되지 않습니다 연결된 클라이언트의 모든 방출된다.

편집 : 당신이 당신의 socket.io의 instatiation 코드에 연결되어있는 사용자는 포트를 지정해야합니다 :

var socket = io('http://localhost:5000'); 

이는 URL 변수에서 포트를 저장하는 것이 adviseable의 당신이 할 수 있도록 프로덕션 환경에 배포 할 때 쉽게 구성 할 수 있습니다.

+0

업데이트했지만 여전히 UI에 전달되는 데이터가 표시되지 않습니다. 제가 누락 된 것이 있습니까? –

+0

서버 쪽 socket.io 구성 코드를 공유해야합니다. 어쩌면 서버에 연결하지 않은 것일 수도 있습니다. –

+0

코드를 업데이트했습니다. 기본적으로 PORT 5000에서 실행 중입니다. –