Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
137
rated 0 times [  139] [ 2]  / answers: 1 / hits: 25558  / 10 Years ago, sat, september 13, 2014, 12:00:00

I'm trying to convert the accepted answer on (How to create a simple http proxy in node.js?) from http to https.



When I try to access the proxy from my browser, the server quits and throws this error :



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


Here is my code :



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


As you can see, I made very little changes and I'm not sure how to fix this.



Any ideas?


More From » node.js

 Answers
19

Looks like you've got the arguments to https.request wrong (http://nodejs.org/api/https.html#https_https_request_options_callback). Should just be:



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


Your certificate information should be included in the options object, from the linked page:



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) {
...
}

[#69470] Thursday, September 11, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
leighrheac

Total Points: 313
Total Questions: 92
Total Answers: 94

Location: Papua New Guinea
Member since Thu, May 7, 2020
4 Years ago
;