2013-02-27 52 views
2

我想要做一些事情(我希望)很簡單:從數據庫接收JSON並通過它循環以在Node.js中創建所有必需的頁面路由。截至目前,我只是使用存根數據,但console.log始終顯示鍵值對中的最後一個值「contact」。第一個控制檯正確顯示一切。嘗試使用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

懷疑這是您的問題,但是:您在第一個控制檯日誌之後缺少分號。 – 2013-02-27 23:02:56

+0

固定。感謝您指出! – streetlight 2013-02-27 23:05:10

回答

1

問題是,閉包中的key的值對於所有路線(上次迭代中的值)都是相同的。

這應該有助於解釋如何創建一個新的閉包在每一個單獨的值: http://www.mennovanslooten.nl/blog/post/62

像這樣的東西應該有所幫助:

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

在上面的代碼,key1保持不同每個迭代的值在單獨的閉包中。

+0

啊,這很好。但是,在嘗試在節點中運行時,我不斷收到以下錯誤:)(key); ^ SyntaxError:意外的令牌) – streetlight 2013-02-27 23:13:17

+0

這是節點特定還是一般?感謝您的幫助! – streetlight 2013-02-27 23:13:52

+0

這不是特定於節點,這是一個javascript特性,但是您會在node.js中遇到更多,因爲您有更多異步代碼。 – 2013-02-27 23:15:22