首页 文章

如何使用expressjs通过https提供页面?

提问于
浏览
3

我是nodejs / expressjs的新手 . 有人可以解释如何通过https服务页面吗?

我不得不以另一种方式问这个问题,stackoverflow抱怨我的帖子主要是代码?

这是错误转储:

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

TypeError:Object#在Object处没有'get'方法 . (/home/john/startup/docm/w2.js:21:5)在Module._compile(module.js:456:26)的Object.Module._extensions..js(module.js:474:10)at at在启动时在Function.Module.runMain(module.js:497:10)的Function.Module._load(module.js:312:12)上的Module.load(module.js:356:32)(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服务页面吗?

1 回答

  • 3

    您的应用程序的问题在于您使用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);
    });
    

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

    • 您没有将Express传递给HTTPS,而是使用HTTPS实例覆盖Express .

    • 您没有将Express应用程序传递给HTTPS实例 .

    • Express static() 中间件应在特定请求处理程序之外提供 .

    • 您将缓冲区传递给另一个缓冲区以设置其编码,尽管 readFileSync() 已经有一个编码选项 .

相关问题