2014-03-03 5 views
0

현재 Node.js를 사용하여 Socket.io를 통해 정보를 보내려고하고 있지만 잘못된 것을하고있는 것처럼 보입니다. 그 이유는 모르겠습니다.socket.io와 함께 빈 객체 작성하기

내 컴퓨터에 Docker를 사용하는 일부 컨테이너가 있으며 원하는 모든 정보를 얻기 위해 내 응용 프로그램에 Docker.io 노드 패키지를 사용합니다. 여기

여기
io.sockets.on('connection', function(socket){ 
    socket.emit('message',container); 
}); 


var container = docker.containers.list(handler); 

function handler(err, res) { 
if (err) throw err; 
console.log("data returned from Docker as JS object: ", res); 
} 

소켓 메시지

var socket = io.connect('/'); 
socket.on('message', function(data){ 
    console.log(data); 
}); 

내가 (소켓을 통해 컨테이너를 보내고있다 데이터를 가져 클라이언트 측 코드의 데이터를 전송하는 서버 측 기능입니다 목록 모양) :

[ { Command: 'top ', 
Created: 1393878688, 
Id: 'fa46297fa16ff184673077545437a64f2adaf62db8774be696d76cc9f52b7881', 
Image: 'ubuntu:12.04', 
Names: [ '/cranky_archimedes' ], 
Ports: [], 
Status: 'Up 20 minutes' } ] 

하지만 클라이언트 측에서 얻을 수있는 유일한 방법은 입니다 : 개체 {}

와 socket.io 로그는이 저에게 보내는 :

debug - websocket writing 5:::{"name":"message","args":[{}]} 
[ { Command: 'top ', 
Created: 1393878688, 
Id: 'fa46297fa16ff184673077545437a64f2adaf62db8774be696d76cc9f52b7881', 
Image: 'ubuntu:12.04', 
Names: [ '/cranky_archimedes' ], 
Ports: [], 
Status: 'Up 20 minutes' } ] 

인수 섹션은 비어 있습니다. 정말 컨테이너에 JSON을 어떻게 넣을 수 있는지 모르겠다. 그래서 그것을 적절히 보낼 수있다. 내가 놓친 게 있니?

편집 1 :

내 컨테이너 변수를 방출하기 전에 로그

은 다음과 같습니다

{ callback: [Function: handler] } 
+0

당신은 컨테이너 개체가 예상 무엇인지 확인하기 위해'socket.emit' 전에 로그를 던진 적이 있습니까? 잘못된 장소의 모습입니다 당신의 클라이언트에서 여기 – sgress454

+0

같습니다, 편집을 참조하십시오. – MaximeHeckel

+0

중괄호 이상한 아무것도처럼 –

답변

1

실제로 몇 가지 오류가 있습니다. 먼저 컨테이너은 당신이 생각하는 것과 다릅니다. docker.containers.list()의 결과가 아니라 함수입니다.

이 "안녕하세요"

var hello = function(){ 
    return "hello"; 
} 
console.log(hello); // [Function] 
console.log(hello()); // hello 

안녕하세요이 "안녕하세요"반환하지만 안녕하세요이 동일하지 않은 기능입니다 다음의 예를 생각해 보자.

기본적으로 컨테이너를 보낼 때 실제로 docker.containers.list()의 결과가 아니라 함수 자체를 보냈습니다.

두 번째 문제는 비동기 함수를 사용하지만이 함수의 콜백이 데이터를 방출 할 때까지 기다리지 않는다는 것입니다.

근본적으로 현재 코드에서 잘못된 시간에 잘못된 것을 보내고 있습니다.

당신이 가지 작업을하기 위해해야 ​​할 것은 아마도이 같은 것입니다 :

io.sockets.on('connection', function(socket) { 
    docker.containers.list(function(err, res) { 
    socket.emit('message', res); 
    }); 
}); 

그것을 시도하지 않은,하지만 그것을 작동합니다!

0

클라이언트 코드는 다음과 같습니다

그것은 다음과 같이해야
socket.on('message', function(data)){ 
    //this console.log is not actually inside the callback 
    console.log(data); 
} 

:

socket.on('message', function(data) { 
    //here the log is inside the callback 
    console.log(data); 
}); 
+0

고마워,하지만 그건 내 오타가 아니야 내 실제 코드가 아니야. – MaximeHeckel

관련 문제