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);