Ответы:
См. Документацию 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()
является просто псевдонимом для 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 для получения текущего каталога
в то время как require () использует ./ относится к текущему каталогу.
Сначала вы помещаете файлы private.key и public.cert в папку / bin, это та же папка, что и файл WWW .
нет такой ошибки в каталоге:
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);