作为node.js模块中的参数

时间:2011-06-08 13:19:49

标签: javascript node.js

在这段代码中:如果我尝试将this.handler作为参数传递给server.createServer(),那么我没有得到任何响应(页面继续在浏览器中加载)。但是如果我使用server.createServer(函数(req,res){//这里的代码与在handler()}中相同的代码),那么它可以工作。我做错了什么?

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 个答案:

答案 0 :(得分:1)

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

那是你的建造者

module.exports = new Con();

那是你的实例

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现在是实例上的方法,而不是构造函数

由于它位于实例上,因此它还可以通过原型访问实例上定义的.handler方法。