簡體   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