简体   繁体   中英

function as parameter in node.js module

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM