3

私はnodejs/expressjsが初めてです。https経由でページを提供する方法を誰か説明してもらえますか?

別の方法でこの質問をする必要があります.スタックオーバーフローは、私の投稿が主にコードであると不平を言っていますか?

エラーダンプは次のとおりです。

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

TypeError: オブジェクト # にはオブジェクトにメソッド 'get' がありません。(/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経由でページを提供する方法を誰か説明してもらえますか?

4

1 に答える 1

3

アプリケーションの問題は、Express インスタンスを HTTPS インスタンスでオーバーライドしていることです。これが適切に行われる方法です:

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 に渡す代わりに、Express を HTTPS インスタンスで上書きしました。
  2. Express アプリケーションを HTTPS インスタンスに渡しませんでした。
  3. Expressstatic()ミドルウェアは、特定のリクエスト ハンドラの外部で提供する必要があります。
  4. readFileSync()既にエンコーディング オプションがあるにもかかわらず、エンコーディングを設定するためにバッファを別のバッファに渡しました。
于 2013-09-15T22:17:56.033 に答える