2013-09-15 3 views
3

Я новичок в nodejs/expressjs. Может кто-нибудь объяснить, как обслуживать страницу через https?Как обслуживать страницу через https с помощью expressjs?

Я должен задать этот вопрос другим способом, stackoverflow жалуется, что мой пост - это в основном код?

Вот дамп ошибки:

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

TypeError: Object # has no method 'get' at Object. (/home/john/startup/docm/w2.js:21:5) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at 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?

+0

не переопределяет приложение переменной после создания экспресс-приложения: 'var app = server.listen (...)' – WiredPrairie

+0

Это также описано здесь: http://expressjs.com/api. html – WiredPrairie

ответ

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. Вместо передачи Экспресс HTTPS вы перезаписали Express, с экземпляром HTTPS.
  2. Вы не передали свое экспресс-приложение на ваш экземпляр HTTPS.
  3. Условное программное обеспечение Express static() должно обслуживаться вне специальных обработчиков запросов.
  4. Вы передали буфер в другой буфер, чтобы установить его кодировку, хотя readFileSync() уже имеет опцию кодирования.
+0

Спасибо, что помогли мне. Мне просто нравится, как люди хотят делиться друг с другом и помогать другим, не таким опытным, вставать и работать. Я сравню ваш ответ с тем, как я пытался это сделать, чтобы я полностью понял, где я ошибся. Еще раз спасибо. – user2744514

+1

Я пробовал это, и хотя сервер работает. Я не могу заставить его обслуживать страницу index1.html. Мой клиентский браузер просто сидит там, и в конце концов, возможно, через 1 минуту он говорит: «Сервер не найден» (Firefox) или «Нет данных» (Chrome) Я могу создать почтовый сервер http. Но мой https-сервер не будет обслуживать страницу. Я не знаю, каков мой разрыв в знаниях. Это что-то мне нужно настроить на стороне клиента? openssl genrsa -out server-key.pem 1024 openssl req -new -key server-key.pem -out server-csr.pem openssl x509 -req -in server-csr.pem -signkey server-key.pem - out server-cert.pem – user2744514

+0

Я получил его работу. В очередной раз благодарим за помощь. Я очень ценю это. – user2744514

Смежные вопросы