2013-02-27 2 views
2

뭔가를하려고합니다 (희망 사항은 간단합니다) : 데이터베이스에서 JSON을 수신하고 Node.js에 필요한 모든 페이지 경로를 만들기 위해 반복합니다. . 현재 스텁 된 데이터를 사용하고 있지만 console.log는 항상 마지막 값인 "연락처"를 키 값 쌍에 표시합니다. 첫 번째 콘솔은 모든 것을 올바르게 표시합니다. Node.js를 사용하여 루프의 페이지를 동적으로 설정하려고합니다.

routes = { 
"Home" : "index.html", 
"about" : "about.html", 
"How it Works" : "how_it_works.html", 
"contribute" : "contribute.html", 
"contact" : "contact.html" 
}; 

function routesGetandSet(data) { 
    for (key in data) { 
    console.log(key + "---" + '/' + data[key]); 
    app.get('/' + data[key], function(req, res) { 
     console.log(data[key]); 
    }); 
    } 
} 

routesGetandSet(routes); 

내가이 동적 노드 페이지 경로를 (결국 내가에서로 데이터를 묶는 것)을 생성 할 수있는 가장 쉬운 방법이 될 것이라고 생각하지만 잘못 될 수 :

여기 내 코드입니다.

누구나 올바른 방향을 제시 할 수 있습니까? 나는 익스프레스 프레임 워크를 사용하고있다.

+0

이 문제에 의문이 생기지 만 첫 번째 콘솔 로그 이후에 세미콜론이 누락되었습니다. –

+0

수정 됨. 지적 해 주셔서 감사합니다! – streetlight

답변

1

클로저의 key 값은 모든 경로 (마지막 반복의 값)에 대해 동일합니다. , key1 다른를 유지

for (key in data) { 
    console.log(key + "---" + '/' + data[key]); 
    (function(key1) { 
    app.get('/' + data[key1], function(req, res) { 
     console.log(data[key1]); 
    }); 
    } 
)(key); 
} 

을 위의 코드에서 : 이 같은 http://www.mennovanslooten.nl/blog/post/62

뭔가 도움이 될 것입니다 : 이것은 하나 각각 별도의 값으로 새로운 클로저를 만드는 방법을 설명하는 데 도움이해야

값은 개별 클로저의 각 반복에 대해

+0

아하 이것은 아주 좋습니다. 그러나 노드에서 실행하려고하면 다음 오류가 발생합니다.) (key); ^ SyntaxError : 예기치 않은 토큰) – streetlight

+0

노드 특정 또는 일반적입니까? 도와 줘서 고마워! – streetlight

+0

이것은 노드에만 국한된 것이 아니라 자바 스크립트의 특성입니다. 그러나 훨씬 더 비동기적인 코드를 가지고 있기 때문에 node.js에서 더 많은 일이 발생할 것입니다. –

관련 문제