2014-09-13 4 views
3

Я пытаюсь преобразовать принятый ответ на (How to create a simple http proxy in node.js?) с http на https.Node.js - слушатель должен быть функцией ошибки

Когда я пытаюсь получить доступ к прокси из моего браузера, сервер завершает работу и выдает эту ошибку:

events.js:171 
    throw TypeError('listener must be a function'); 
    ^
TypeError: listener must be a function 

Вот мой код:

var https = require('https'); 
var fs = require('fs'); 

var ssl = { 
    ca: fs.readFileSync("cacert.pem"), 
    key: fs.readFileSync("key.pem"), 
    cert: fs.readFileSync("cert.pem") 
}; 

https.createServer(ssl, onRequest).listen(3000, '127.0.0.1'); 

function onRequest(client_req, client_res) { 

    console.log('serve: ' + client_req.url); 

    var options = { 
    hostname: 'www.example.com', 
    port: 80, 
    path: client_req.url, 
    method: 'GET' 
    }; 

    var ssl = { 
    ca: fs.readFileSync("cacert.pem"), 
    key: fs.readFileSync("key.pem"), 
    cert: fs.readFileSync("cert.pem") 
    }; 

    var proxy = https.request(ssl, options, function(res) { 
    res.pipe(client_res, { 
     end: true 
    }); 
    }); 

    client_req.pipe(proxy, { 
    end: true 
    }); 
} 

Как вы можете видеть, я сделал очень небольшие изменения, и я не уверен, как это исправить.

Любые идеи?

ответ

3

Похоже, что у вас есть аргументы https.request неправильный (http://nodejs.org/api/https.html#https_https_request_options_callback). Должно быть просто:

var proxy = https.request(options, function(res) { 
    res.pipe(client_res, { 
    end: true 
    }); 
}); 

Вашей информация сертификата должна быть включена в настройках объекта, от связанной страницы:

var options = { 
    hostname: 'encrypted.google.com', 
    port: 443, 
    path: '/', 
    method: 'GET', 
    key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'), 
    cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem') 
}; 
options.agent = new https.Agent(options); 

var req = https.request(options, function(res) { 
    ... 
} 
+0

удаление «ssl» из прокси-сервера var throws и error при попытке доступа к странице: throw er; // Необработанное событие «error» - Ошибка: 34410095616: ошибка: 140770FC: SSL-процедуры: SSL23_GET_SERVER_HELLO: неизвестный протокол: ../ deps/openssl/openssl/ssl/s23_clnt.c: 787 –

+0

Это сделало трюк, спасибо. –

1

Я решил эту ошибку, передав имя функции как пары, а не переменной который содержит функцию

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