随着像LocomotiveJS这样的MVC 框架现在可用于 NodeJS / Express,我只是想知道如何在应用程序的一部分上实现 SSL?
例如,电子商务应用程序。
我需要所有 /checkout 控制器来强制使用 SSL。
我已经阅读过这样的教程,但不确定如何使用 Locomotive 来实现这一点,因为 Express 被有效地“包装”了?
随着像LocomotiveJS这样的MVC 框架现在可用于 NodeJS / Express,我只是想知道如何在应用程序的一部分上实现 SSL?
例如,电子商务应用程序。
我需要所有 /checkout 控制器来强制使用 SSL。
我已经阅读过这样的教程,但不确定如何使用 Locomotive 来实现这一点,因为 Express 被有效地“包装”了?
目前,Locomotive 不直接支持 SSL,但根据Locomotive 的创建者 Jared Hanson在 4 月发布的 Google Groups 帖子,应该很快就会支持。
目前,我一直将 Locomotive 放在终止 SSL 的代理后面。但是,我将很快为此添加一个命令行选项,以获得直接支持。
也就是说,如果您想要一个完全基于节点的解决方案而不使用代理,那么目前您需要在 Locomotive 中编辑 Express 实例。我已经测试了以下内容,并且运行良好。
在撰写本文时,npm install locomotive
使用 Express 2.x,尽管 github 上的最新版本已更新为使用 Express 3.x。
如果您将 Locomotive 与 Express 2.x 一起使用,那么我认为您必须/locomotive/lib/locomotive/index.js
在第 180 行附近进行编辑,使其看起来像:
var sslOptions = {
cert : fs.readFileSync('/path/to/your/ssl-cert/dev.crt')
, key : fs.readFileSync('/path/to/your/ssl-key/dev.key')
};
var self = this
, server = express.createServer(sslOptions)
, entry;
此外,您可能仍希望侦听 HTTP 并将所有流量重定向到 HTTPS。坚持使用所有基于节点的解决方案,您可以简单地在结束时启动另一个 Express 服务器/locomotive/lib/locomotive/cli/server.js
,将其所有流量重定向到 HTTPS,例如
...
debug('booting app at %s in %s environment', dir, env);
locomotive.boot(dir, env, function(err, server) {
if (err) { throw err; }
server.listen(port, address, function() {
var addr = this.address();
debug('listening on %s:%d', addr.address, addr.port);
});
// add an http server and redirect all request to https
var httpServer = require('express').createServer();
httpServer.all('*', function(req, res) {
res.redirect('https://' + address + ':' + port + req.url);
});
httpServer.listen(80); // probably change based on NODE_ENV
});
}
最后,启动服务器:
$ lcm server -p 443 # again, probably use different port in development
所有这些框架都基于 Express 之上,后者基于具有 HTTPS 支持的 connect。
无论如何,在现实生活中,您可能希望有一个 nginx/或其他代理为您处理 https。