2017-04-20 6 views
5

サーバーをHTTPSに変更しようとしましたが、正常に動作しません。 私のページは、何かを使って新しいサーバーを作成するようなものです。私は、サーバーを実行するために2つのファイル、express必要とルートでapp.js、そして私のserver.jsを持っている。この場合 は./appNodejsサーバーのHTTPSからHTTPSへの変更

マイapp.js(サーバー側)が必要です:

var express = require('express'); // app server 
var bodyParser = require('body-parser'); // parser for post requests 
var http = require('http'); 
var https = require('https'); 
//all endpoints is inside my app.js 
var app = express(); 

// endpoints here 
//code .. code with routes, code... 

module.exports = app; 

マイserver.js(サーバー側):

var fs = require('fs') 
    var server = require('./app'); 
    var port = process.env.PORT || process.env.VCAP_APP_PORT || 3000; 


    var options = { 
     key: fs.readFileSync('certificates/xxx.key'), 
     cert: fs.readFileSync('certificates/xxx.cer') 
    }; 

    server.listen(port, options, function() { 
     console.log('Server execute here %d', port); 
    }); 

たぶん私は一つだけのファイルで一つのサーバを作成することができ、初心者の質問ですが、私はこのような場合に作成する方法を知らない...

誰かが私がこのケースの使用で間違ったことをして説明するのを助けることができますか?

答えて

3

app.jsからエクスポートするものは、appという表現です。これは、httpsサーバーを作成するのに適切な種類のオブジェクトではありません。代わりに、手動でhttpsサーバーを作成してからExpressアプリケーションを関連付ける必要があります。あなたはここでそれを行うためのExpress文書を見ることができます:https://expressjs.com/en/api.html#app.listen

あなたはExpress repository on Githubapp.listen()ためのコードを見れば、あなたはそれがないすべてがこのであることがわかります。

app.listen = function listen() { 
    var server = http.createServer(this); 
    return server.listen.apply(server, arguments); 
}; 

だから、への道httpサーバーを作成するために、ハードワイヤードではありませんし、持っていますhttpsサーバーを作成します。

httpsサーバーを作成するには、サーバーを自分で作成し、appオブジェクトを要求ハンドラとして指定する必要があります。手動でHTTPSサーバオブジェクトを作成するhttpsモジュールを使用して、あなたが要求ハンドラとしてそれとごExpressのオブジェクトを関連付ける

var express = require('express'); 
var https = require('https'); 
var app = express(); 
var options = {...}; // read certificates in here 

https.createServer(options, app).listen(443); 

注:

そのための一般的なスキームはこれです。 Expressのapp.listen()インターフェースは、httpsサーバー作成機能を提供していないので、自分で行う必要があります。


あなたが本当にあなたの2つのファイルを使用する場合は、あなたがこれを行うことができます:

app.js

var express = require('express'); // app server 
var bodyParser = require('body-parser'); // parser for post requests 
//all endpoints is inside my app.js 
var app = express(); 

// endpoints here 
//code .. code with routes, code... 

module.exports = app; 

server.js

var fs = require('fs') 
var app = require('./app'); 
var port = process.env.PORT || process.env.VCAP_APP_PORT || 443; 
var https = require('https'); 


var options = { 
    key: fs.readFileSync('certificates/xxx.key'), 
    cert: fs.readFileSync('certificates/xxx.cer') 
}; 

https.createServer(options, app).listen(port); 
+0

こんにちは@のjfriend00を、あなたの助けに感謝します。私はあなたの例をして、私はこのエラーが発生します:ERR_EMPTY_RESPONSEページlocalhostは動作しません、データはlocalhostに送信されていません。どのように問題があるのか​​分かっていますか? –

+1

@SayuriMizuguchi - あなたのコードでは、実際に特定の要求を処理して応答を送信するために、 'app.get( '/'、function(req、res){code here})'などのExpressルートハンドラは表示されません。 – jfriend00

+1

@SayuriMizuguchi - httpサーバが起動して実行中であることから、元の質問に答えているようです。おそらく 'res.render()'と新しい質問になるはずのテンプレートに関連する別の問題があります。おそらくあなたは[適切なビューエンジンを登録する]必要がありますが(https://expressjs.com/en/guide/using-template-engines.html)、ここでその問題について議論すべきではありません。それ以上の助けが必要な場合は、新しい質問を投稿してください。 'res.send(" hello ")'を使うだけで、httpsサーバーが動作していることを確認できます。 – jfriend00

関連する問題