[英]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.