2017-04-20 74 views
5

Sunucumu HTTPS olarak değiştirmeyi deneyin, ancak iyi çalışmıyor. Sayfam, herhangi bir şeye sahip yeni bir sunucu oluşturmuş gibi görünüyor. Ben 2 dosya var Bu durumda , express gerekli ve yolları ile app.js ve sunucuyu çalıştırmak için benim server.js (sunucu tarafı) ./appNodejs Sunucu HTTP'sini HTTPS olarak değiştir

Benim app.js gerektirir:

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; 

Benim server.js (sunucu tarafı): ...

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); 
    }); 

Belki bir acemi soru, ben sadece bir dosya ile bir sunucu oluşturabilir, ama bu dava ile nasıl oluşturulacağını bilmiyorum

Birisi bana bu davada neyi yanlış yaptığımı açıklamama yardım edebilir mi?

cevap

3

Sizin durumunuzda, app.js dışa aktarma işleminiz, app numaralı bir nesnedir. Bu, bir https sunucusunu oluşturmak için doğru türde bir nesne değildir. Bunun yerine, bir https sunucusunu manuel olarak oluşturmanız ve ardından ekspres uygulamanızı bununla ilişkilendirmeniz gerekir. Ekspres dokümanı burada yaptığınız için görebilirsiniz: https://expressjs.com/en/api.html#app.listen.

Eğer Express repository on Github yılında app.listen() için koduna baktığımızda, bunu yapar tüm bu olduğunu göreceksiniz: Yani

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

, zor kablolu bir http sunucu oluşturmak için ve hiçbir şekilde zorundadır https sunucusu oluşturun.

Bir https sunucusu oluşturmak için sunucuyu kendiniz oluşturmalı ve bunun için istek işleyici olarak app nesnesini belirtmelisiniz. el https sunucu nesnesi oluşturmak için https modülü kullanmak ve daha sonra istek işleyici olarak o ile Ekspres nesneyi ilişkilendirmek

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

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

Not:

bunun için genel düzeni budur. Express'teki app.listen() arabirimi, https sunucu oluşturma özelliğini sunmaz, böylece bunu kendiniz yapmanız gerekir. ,

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

Merhaba @ jfriend00 app.js: gerçekten iki dosyayı kullanmak istiyorsanız


, o zaman bu yapabileceğini yardımlarınız için şimdiden teşekkürler. Örneğinizi yaptım ve şu hatayı alıyorum: ERR_EMPTY_RESPONSE localhost sayfası çalışmıyor, localhost'a hiçbir veri gönderilmedi. Sorunun nasıl olduğunu biliyor musun? –

+1

@SayuriMizuguchi - Kodunuz, belirli bir isteği işlemek ve yanıt göndermek için "app.get ('/', işlev (req, res) {code here})" gibi herhangi bir Express yol işleyicisi göstermez. – jfriend00

+1

@SayuriMizuguchi - Orjinal sorunun artık http sunucunuz artık çalışıyor ve çalışıyor olduğu yanıtlanıyor. Artık yeni bir soruda olması gereken 'res.render()' ve şablonlarınız ile ilgili başka bir probleminiz var.Belki de [uygun görüş motorunu kaydettirmeniz gerekiyor] (https://expressjs.com/en/guide/using-template-engines.html), ancak bu konuyu burada tartışmamalıyız. Bununla ilgili daha fazla yardıma ihtiyacınız varsa, lütfen yeni bir soru gönderin. Https sunucunuzun sadece 'res.send (" merhaba ")' kullanarak çalıştığını doğrulayabilirsiniz. – jfriend00