2014-05-12 4 views
0

저는 Node.js에 처음 접했고 노드에 대한 이해와 관련이있는 작은 문제가 있습니다.루프가있는 Node.js 및 서버 ID?

기본적으로 저는 여러 개의 서버 (여러 포트마다 하나씩)를 만들어 내 앱이 여러 클라이언트를 호출하는 상황을 에뮬레이트하려고합니다. 그러나, 내가 루프 때, 나는 그들의 "ID"를 반환 엔드 포인트를 만들려고 노력하고있어,하지만 그것은 항상 내가 client.set 동안 저장된 인덱스가 아닌 19의 최종 값을 반환합니다. 루프 동안. 나는 간단한 것을 놓치고 있습니까? 여기 내 server.js의 예상대로

이 예에서
var express = require('express'); 

    var clientcount= 20; 
    var clients= new Array(); 

    for (var i=0; i < clientcount; i++) { 

     var client= express(); 

     client.set('id', i); 

     client.get('/', function(req,res) { 

      console.log("Pinged " + client.get('id')); 
      res.send("Hello world from " + client.get('id')); 

     }); 

     clients.push(client); 

     console.log("Test value: " + clients[i].get('id')); 

     clients[i].listen(3001 + i); 
     console.log("Client listening on port " + (3001 + i)); 

    } 

, "테스트 값은"출력합니다,하지만, 말 127.0.0.1:3014를 칠 우편 배달부를 사용하는 경우 예상대로, 내가 대신 13의 19를 얻을 수 .

+0

@ benjamin-gruenbaum의 코멘트는 http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example의 문제를 해결했습니다. 감사합니다. – SleepyProgrammer

+2

기꺼이 도와 드리겠습니다. JavaScript에서 EcmaScript6의 매우 일반적인 문제인데, 'let'이이를 완화하는 데 도움이 될 수 있습니다. –

답변

1

나는 어떻게 보일지 모르겠다.하지만 나는이 객체의 동일한 인스턴스를 각 반복에서 새로 만든 client 변수에 할당 한 것처럼 보인다. 대신 새 인스턴스를 만들 필요가 없습니까?

+0

감사! 이것 역시 사실입니다 ... 클라이언트 인스턴스와의 클로저 문제가있었습니다. D. – SleepyProgrammer