繁体   English   中英

Nodejs 将服务器 HTTP 更改为 HTTPS

[英]Nodejs Change server HTTP to HTTPS

我尝试将我的服务器更改为 HTTPS,但无法正常工作。 我的页面显示就像我创建了一个返回任何内容的新端点。 在这种情况下,我有 2 个文件,带有express实例化和路由的 app.js,以及我的 server.js 来执行从 express 获取实例的服务器。

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

const express = require('express'); // app server
const bodyParser = require('body-parser'); // parser for post requests
const http = require('http');
const https = require('https');
// instance of express
let app = express();

// endpoints here
// code .. code with routes, code...

module.exports = app;

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

const fs = require('fs')
const server = require('./app');
const port = process.env.PORT || process.env.VCAP_APP_PORT || 3000;


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

也许是一个新手问题,我可以有一个包含所有内容的文件,但我希望更加模块化。

有人可以帮助我,或者解释我在这个案例使用中做错了什么?

在您的情况下,您从app.js导出的是一个快速app对象。 这不是创建 https 服务器的正确对象。 相反,您需要手动创建一个 https 服务器,然后将您的 Express 应用程序与之关联。 您可以在此处查看用于执行此操作的 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);
};

因此,创建http服务器是硬连接的,无法创建https服务器。

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

一般方案是这样的:

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

https.createServer(options, app).listen(443);

请注意,您手动使用https模块创建 https 服务器对象,然后将 Express 对象与该对象关联为请求处理程序。 Express 中的app.listen()接口不提供 https 服务器创建,因此您必须自己创建。


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

应用程序.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;

服务器.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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM