0

in this code: if i try to pass this.handler as parameter to server.createServer() , then i get no response (the page keeps loading in browser). but if i use server.createServer(function(req, res) { //same code here as in handler() }) , then it works. what am i doing wrong?

var Con = module.exports = function() {
    process.EventEmitter.call(this);
} 

var createServer = module.exports.createServer = function(options) {
    console.log('start');
    this.port = options.port || 9122;
    this.secure = options.secure || false;
    if(this.secure === true)
        if(!options.key || !options.certificate)
            this.secure = false;
        else {
            this.key = options.key;
            this.certificate = options.certificate;
        }

    if(this.secure) {
        this.server = require('https');
        var fs = require('fs');
        var opt = {
            key: fs.readFileSync('privatekey.pem'),
            cert: fs.readFileSync('certificate.pem')
        };
        this.server.createServer(opt, this.handler).listen(this.port); 
    } else {
        this.server = require('http');
        this.server.createServer(this.handler).listen(this.port);
    } 
}

Con.prototype.handler = function(req, res) {
    console.log('request');
    res.writeHead(200);
    res.write(req.url);
    res.end();   
}

1 Answer 1

1
var Con = function() {
    process.EventEmitter.call(this);
} 

That's your constuctor

module.exports = new Con();

That's your instance

var createServer = module.exports.createServer = function(options) {
    console.log('start');
    this.port = options.port || 9122;
    this.secure = options.secure || false;
    if(this.secure === true)
        if(!options.key || !options.certificate)
            this.secure = false;
        else {
            this.key = options.key;
            this.certificate = options.certificate;
        }

    if(this.secure) {
        this.server = require('https');
        var fs = require('fs');
        var opt = {
            key: fs.readFileSync('privatekey.pem'),
            cert: fs.readFileSync('certificate.pem')
        };
        this.server.createServer(opt, this.handler).listen(this.port); 
    } else {
        this.server = require('http');
        this.server.createServer(this.handler).listen(this.port);
    } 
}

.createServer is now a method on the instance rather then the constructor.

Since it's on the instance it also has access to the .handler method defined on the instance through the prototype.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.