2017-04-20 2 views
5

내 서버를 HTTPS로 변경하려고했지만 제대로 작동하지 않습니다. 내 페이지에 아무것도없는 새 서버를 만드는 것처럼 보입니다. 나는이 개 파일이이 경우 는 express 필요한 라우팅과 app.js, 서버를 실행하는 내 server.js은 (서버 측)이 ./appNodejs 서버 HTTP를 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 서버를 만든 다음 익스프레스 앱을 https 서버와 연결해야합니다. 여기에 대한 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 모듈을 사용하고 당신이 요청 핸들러로 그와 특급 객체를 연결

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 서버 작성 기능을 제공하지 않으므로 직접 작성해야합니다. ,

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을 app.js : 당신이 정말이 개 파일을 사용하려면


는, 당신은이 작업을 수행 할 수 도와 주셔서 감사합니다. 내가 당신의 예를 들어이 오류가 발생 : ERR_EMPTY_RESPONSE 페이지 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

관련 문제