0

随着像LocomotiveJS这样的MVC 框架现在可用于 NodeJS / Express,我只是想知道如何在应用程序的一部分上实现 SSL?

例如,电子商务应用程序。

我需要所有 /checkout 控制器来强制使用 SSL。

我已经阅读过这样的教程,不确定如何使用 Locomotive 来实现这一点,因为 Express 被有效地“包装”了?

4

2 回答 2

2

目前,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
于 2012-08-19T04:51:30.437 回答
0

所有这些框架都基于 Express 之上,后者基于具有 HTTPS 支持的 connect。

无论如何,在现实生活中,您可能希望有一个 nginx/或其他代理为您处理 https。

于 2012-08-18T17:00:18.727 回答