以前,在旧版本的 express 中,我可以这样做:
express.createServer({key:'keyFile', cert:'certFile'});
但是,在较新版本的 express 中,这不再有效:
var app = express();
我应该打电话app.use()
来设置证书吗?如果有怎么办?
以前,在旧版本的 express 中,我可以这样做:
express.createServer({key:'keyFile', cert:'certFile'});
但是,在较新版本的 express 中,这不再有效:
var app = express();
我应该打电话app.use()
来设置证书吗?如果有怎么办?
请参阅Express 文档以及https.createServer 的 Node 文档(这是 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
我能够让 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");
});
这是我的express 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);