【问题标题】:How do I serve a page over https using expressjs?如何使用 expressjs 通过 https 提供页面?
【发布时间】:2013-09-20 00:00:34
【问题描述】:

我是 nodejs/expressjs 的新手。有人可以解释一下如何通过 https 提供页面吗?

我不得不换个方式问这个问题,stackoverflow在抱怨我的帖子主要是代码?

这是错误转储:

app.get('/', function(request, response) {
    ^

TypeError: Object # has no method 'get' at Object。 (/home/john/startup/docm/w2.js:21:5) 在 Module._compile (module.js:456:26) 在 Object.Module._extensions..js (module.js:474:10) 在 Module.load (module.js:356:32) 在 Function.Module._load (module.js:312:12) 在 Function.Module.runMain (module.js:497:10) 在启动时 (node.js:119:16) 在 node.js:901:3

这里是代码:

var express = require('express');
var   fs = require('fs');
var app = express();

var options = {
    ca:   fs.readFileSync('csr.pem'),
    cert: fs.readFileSync('cert.pem'),
    key:  fs.readFileSync('key.pem')
};


var server = require('https').createServer(options);
var portNo = 8889;
var app = server.listen(portNo, function() {
  console.log((new Date()) + " Server is listening on port " + 8888);
});

app.get('/', function(request, response) {
 app.use(express.static(__dirname));
 console.log('app.get slash');
 var buf = new Buffer(fs.readFileSync('index1.html'), 'utf-8');
 response.send(buf.toString('utf-8'));

});

我是 nodejs/expressjs 的新手。有人可以解释一下如何通过 https 提供页面吗?

【问题讨论】:

  • 在创建 express 应用后不要重新定义变量 app:var app = server.listen(...)
  • 这里也有记录:expressjs.com/api.html

标签: node.js https express


【解决方案1】:

您的应用程序的问题在于您正在使用 HTTPS 实例覆盖您的 Express 实例。这是正确完成的方式:

var fs = require('fs');
var express = require('express');
var app = express();
var https = require('https');

var options = {
  ca: fs.readFileSync('csr.pem'),
  cert: fs.readFileSync('cert.pem'),
  key: fs.readFileSync('key.pem')
};

var server = https.createServer(options, app);
server.listen(443, function() {
  console.log((new Date()) + ' Server is listening on port 443');
});

app.use(express.static(__dirname));
app.get('/', function(req, res) {
 console.log('app.get slash');
 var file = fs.readFileSync('index1.html', {encoding: 'utf8'});
 res.send(file);
});

这些是您的代码中的错误:

  1. 您不是将 Express 传递给 HTTPS,而是使用 HTTPS 实例覆盖 Express。
  2. 您没有将 Express 应用程序传递给 HTTPS 实例。
  3. Express static() 中间件应在特定请求处理程序之外提供。
  4. 尽管readFileSync() 已经有一个编码选项,但您将一个缓冲区传递给另一个缓冲区以设置其编码。

【讨论】:

  • 感谢您帮助我。我只是喜欢人们愿意分享和帮助没有经验的其他人启动和运行的方式。我会将您的答案与我的尝试进行比较,以确保我完全理解我哪里出错了。再次感谢。
  • 我试过这个,虽然服务器运行。我无法让它为 index1.html 页面提供服务。我的客户端浏览器就在那里,最终大概 1 分钟后,它显示“找不到服务器”(Firefox)或“未收到数据”(Chrome)我可以创建一个 http 服务器。但是我的 https 服务器不会提供该页面。我不知道我的知识差距是什么。我需要在客户端配置吗? openssl genrsa -out server-key.pem 1024 openssl req -new -key server-key.pem -out server-csr.pem openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server- cert.pem
  • 我搞定了。再次感谢你的帮助。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2011-02-27
  • 2011-01-18
  • 2020-03-20
  • 2011-03-27
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多