2014-05-10 129 views
0

這裏是我的功能自定義事件偵聽器。EventEmitter

function postRequest(requestData, returnData) { 
    var options = { 
     hostname: 'www.google.com', 
     port: 80, 
     path: '/upload', 
     method: 'POST' 
    }; 

    var req = require('http').request(options, function(res) { 
     console.log('STATUS: ' + res.statusCode); 
     console.log('HEADERS: ' + JSON.stringify(res.headers)); 
     res.setEncoding('utf8'); 
     res.on('data', function (chunk) { 
      returnData(chunk); 
     }); 
    }); 

    req.on('error', function(e) { 
     returnData(e.message); 
    }); 

    // write data to request body 
    req.write(requestData); 
    req.end(); 
} 

正如您所知道的回調函數或者返回錯誤信息,否則將返回響應數據。

我想創建兩個自定義事件偵聽器 第一個將被.ON(「responseError」),第二個會。對(「responseData」)

我想能夠調用

postRequest.on('responseError', function(err){/*Do something*/}); 

postRequest.on('responseData', function(data){/*Do something else*/}); 

我如何使用節點require('events').EventEmitter實現這一目標?

回答

1

幾個小時(我是新來的面向對象的JavaScript),我做了它,以後這裏是解決

//import utils because it is easier to do inheritance 
var util = require("util") 
    //import core events 
    , EventEmitter = require("events").EventEmitter; 

    var ComUtils = function() { 
     //add events to class constructor 
     EventEmitter.call(this); 
    } 

    //inherit from events 
    util.inherits(ComUtils, EventEmitter); 

    //add postRequest function to ComUtils class 
    ComUtils.prototype.postRequest = function(dest, requestJSON) { 
     //make a reference to postRequest function(important) 
     var self = this; 
     var options = { 
      hostname: 'www.google.com', 
      port: 80, 
      path: dest, 
      method: 'POST' 
     }; 

     var req = require('http').request(options, function(res) { 
     console.log('STATUS: ' + res.statusCode); 
     console.log('HEADERS: ' + JSON.stringify(res.headers)); 
     res.setEncoding('utf8'); 
     res.on('data', function (chunk) { 
      //create an emitter(from EventEmitter class) that will fire off an event 
      self.emit('returnData',chunk); 
     }); 
    }); 

    req.on('error', function(e) { 
     //another emitter 
     self.emit('error',e.message); 
    }); 

    // write data to request body 
    req.write(requestJSON); 
    req.end(); 
} 

module.exports.ComUtils = ComUtils; 

,並利用這個需要做以下

var httpUtils = require('./someModule') 
, utils = new httpUtils.ComUtils(); 

utils.on('returnData', function(data){ 
console.log(data) 
}).postRequest('/', 'requestJSON'); 
相關問題