繁体   English   中英

function 作为 node.js 模块中的参数

[英]function as parameter in node.js module

在这段代码中:如果我尝试将 this.handler 作为参数传递给 server.createServer(),那么我没有得到任何响应(页面一直在浏览器中加载)。 但是如果我使用 server.createServer(function(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();   
}
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方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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