2013-05-10 39 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

相关问题