簡體   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