Nodejs将服务器HTTP更改为HTTPS

我尝试将我的服务器更改为HTTPS,但无法正常工作。 我的页面显示就像我用任何东西创build一个新的服务器。 在这种情况下,我有2个文件,app.js需要express和路由,而我的server.js来执行服务器需要./app

我的app.js(服务器端):

 var express = require('express'); // app server var bodyParser = require('body-parser'); // parser for post requests var http = require('http'); var https = require('https'); //all endpoints is inside my app.js var app = express(); // endpoints here //code .. code with routes, code... module.exports = app; 

我的server.js(服务器端):

  var fs = require('fs') var server = require('./app'); var port = process.env.PORT || process.env.VCAP_APP_PORT || 3000; var options = { key: fs.readFileSync('certificates/xxx.key'), cert: fs.readFileSync('certificates/xxx.cer') }; server.listen(port, options, function() { console.log('Server execute here %d', port); }); 

也许是一个新手问题,我只能创build一个文件服务器,但我不知道如何创build这种情况下…

有人可以帮助我,并解释我做错了这种情况下使用?

在你的情况下,你从app.js导出的是一个快速的app对象。 这不是创buildhttps服务器的正确对象。 相反,您需要手动创buildhttps服务器,然后将您的快速应用程序与该服务器相关联。 您可以在这里看到Express文档: https : //expressjs.com/en/api.html#app.listen 。

如果你在Github上的Express仓库中查看app.listen()的代码,你会发现它所做的只是这个:

 app.listen = function listen() { var server = http.createServer(this); return server.listen.apply(server, arguments); }; 

因此,创build一个http服务器是困难的,并且无法创build一个https服务器。

要创buildhttps服务器,您必须自己创build服务器,并将该app对象指定为它的请求处理程序。

一般的scheme是这样的:

 var express = require('express'); var https = require('https'); var app = express(); var options = {...}; // read certificates in here https.createServer(options, app).listen(443); 

请注意,您手动使用https模块创buildhttps服务器对象,然后将您的Express对象与请求处理程序关联起来。 Express中的app.listen()接口不提供https服务器创build,所以你必须自己做。


如果你真的想使用你的两个文件,那么你可以这样做:

app.js

 var express = require('express'); // app server var bodyParser = require('body-parser'); // parser for post requests //all endpoints is inside my app.js var app = express(); // endpoints here //code .. code with routes, code... module.exports = app; 

server.js

 var fs = require('fs') var app = require('./app'); var port = process.env.PORT || process.env.VCAP_APP_PORT || 443; var https = require('https'); var options = { key: fs.readFileSync('certificates/xxx.key'), cert: fs.readFileSync('certificates/xxx.cer') }; https.createServer(options, app).listen(port);