2013-05-10 22 views
3

好的,所以我有一個包含兩個express服務器的nod​​e.js應用程序。一個監聽端口80(HTTP),另一個監聽端口443(HTTPS)。創建對象以附加到Node.js中的HTTP和HTTPS Express服務器

現在,這些不具備所有相同的路線。恰恰相反,大多數東西都通過HTTPS通過HTTP進行傳遞。但是,有一些重疊。

所以,我想知道是否有一種方法來'綁定'路由到secureApp和應用程序,因爲我稱他們,使我不必寫兩次路線?

ex。現在我有兩套相同的路線(一個用於HTTP,另一個用於HTTPS):

app.get('/tweet-stats.json', function(req, res){ 
    res.set('Content-Type', 'application/json'); 
    res.send(publicTweetStatus()); 
}); 

secureApp.get('/tweet-stats.json', function(req, res){ 
    res.set('Content-Type', 'application/json'); 
    res.send(publicTweetStatus()); 
}); 

我願做這樣的事情:

model.get('/tweet-stats.json', function(req, res){ 
    res.set('Content-Type', 'application/json'); 
    res.send(publicTweetStatus()); 
}); 

app.handle.bind(model); 
secureApp.handle.bind(model); 

這可能嗎?我會做出更好的編碼,我只在所有端口上管理此特定路由的一個實例。

+0

我真正好奇,你爲什麼不提供一切通過HTTPS? – 2013-05-10 03:18:26

+0

表現。只有某些東西是真正的私人數據。這需要HTTPS,其他一切都是公開的,我將通過HTTP或HTTPS(用戶選擇)提供服務。一些用戶喜歡HTTPS,並使用瀏覽器插件,如[HTTP Everywhere](https://www.eff.org/https-everywhere)。我永遠不會降級HTTPS請求,但我會要求私密的額外安全性。 – 2013-05-10 04:00:59

回答

7

你爲什麼要重複自己?只是塊路由不能使用

function secureOnly(req, res, next) { 
    if (!req.secure) { 
    res.send(426, 'sorry') 
    else { 
    next() 
    } 
} 

和監聽兩個端口

http.createServer(app).listen(80) 
https.createServer(app).listen(443) 
+3

......並且在安全路由中,如此指定:'app.get('/ route',secureOnly,function(req,res){...});' – josh3736 2013-05-10 03:34:53

+0

真的很有意思。但是,我不想使用301重定向嗎? [見這裏](http://serverfault.com/questions/289697/should-i-use-http-code-301-or-426-on-port-80-of-a-https-only-server) – 2013-05-10 03:58:09

+0

由你決定。要點是,不需要重複自己! – 2013-05-10 17:01:24

相關問題