ก่อนหน้านี้ใน Express เวอร์ชันเก่าฉันสามารถทำได้:
express.createServer({key:'keyFile', cert:'certFile'});
อย่างไรก็ตามในเวอร์ชันใหม่กว่าจะใช้งานไม่ได้อีกต่อไป:
var app = express();
ฉันควรโทรapp.use()
ไปกำหนดใบรับรองหรือไม่? ถ้าเป็นอย่างไร
ก่อนหน้านี้ใน Express เวอร์ชันเก่าฉันสามารถทำได้:
express.createServer({key:'keyFile', cert:'certFile'});
อย่างไรก็ตามในเวอร์ชันใหม่กว่าจะใช้งานไม่ได้อีกต่อไป:
var app = express();
ฉันควรโทรapp.use()
ไปกำหนดใบรับรองหรือไม่? ถ้าเป็นอย่างไร
คำตอบ:
ดูเอกสาร Expressรวมทั้งเอกสาร Node สำหรับ https.createServer (ซึ่งเป็นสิ่งที่ Express แนะนำให้ใช้):
var privateKey = fs.readFileSync( 'privatekey.pem' );
var certificate = fs.readFileSync( 'certificate.pem' );
https.createServer({
key: privateKey,
cert: certificate
}, app).listen(port);
ตัวเลือกอื่น ๆ สำหรับ createServer อยู่ที่: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener
createServer
in connect.js
(express เพียงสืบทอดสิ่งนี้จากการเชื่อมต่อ) คุณจะเห็นว่ามันส่งคืนฟังก์ชันที่มีลายเซ็นที่ถูกต้อง connect()
เป็นเพียงนามแฝงสำหรับconnect.createServer()
ดังนั้นจึงเป็นเช่นนั้นexpress()
(ซึ่งอาจเป็นการเริ่มต้นเพิ่มเติมบางอย่าง แต่ผลลัพธ์ก็ยังคงเป็นฟังก์ชันที่เหมาะสมสำหรับใช้เป็นตัวจัดการคำขอ)
app
ถูกกำหนดไว้ คำตอบนี้เป็นที่น่าพอใจ
ฉันสามารถทำให้ SSL ทำงานกับรหัสต้นแบบต่อไปนี้:
var fs = require('fs'),
http = require('http'),
https = require('https'),
express = require('express');
var port = 8000;
var options = {
key: fs.readFileSync('./ssl/privatekey.pem'),
cert: fs.readFileSync('./ssl/certificate.pem'),
};
var app = express();
var server = https.createServer(options, app).listen(port, function(){
console.log("Express server listening on port " + port);
});
app.get('/', function (req, res) {
res.writeHead(200);
res.end("hello world\n");
});
นี้เป็นของฉันทำงานรหัสสำหรับด่วน 4.0
express 4.0 แตกต่างจาก 3.0 และอื่น ๆ มาก
4.0 คุณมีไฟล์ / bin / www ซึ่งคุณจะเพิ่ม https ที่นี่
"npm start" เป็นวิธีมาตรฐานในการเริ่มเซิร์ฟเวอร์ Express 4.0
readFileSync () ฟังก์ชันควรใช้__dirname get current directory
ในขณะที่ต้องใช้ () ใช้. /อ้างถึงไดเร็กทอรีปัจจุบัน
ครั้งแรกที่คุณใส่ private.key และ public.cert ไฟล์ภายใต้โฟลเดอร์ bin / มันเป็นโฟลเดอร์เดียวกันเป็นแฟ้ม
ไม่พบไดเรกทอรีดังกล่าวข้อผิดพลาด:
key: fs.readFileSync('../private.key'),
cert: fs.readFileSync('../public.cert')
ข้อผิดพลาดไม่พบไดเรกทอรีดังกล่าว
key: fs.readFileSync('./private.key'),
cert: fs.readFileSync('./public.cert')
รหัสการทำงานควรเป็น
key: fs.readFileSync(__dirname + '/private.key', 'utf8'),
cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')
รหัส https ที่สมบูรณ์คือ:
const https = require('https');
const fs = require('fs');
// readFileSync function must use __dirname get current directory
// require use ./ refer to current directory.
const options = {
key: fs.readFileSync(__dirname + '/private.key', 'utf8'),
cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')
};
// Create HTTPs server.
var server = https.createServer(options, app);