2013-02-17 93 views
0

我在學習node.js.在cloud9上嘗試一些演示。演示非常簡單,只有2個js文件。我一行一行地檢查,一切似乎都很好。請幫我調試它。node.js,需要幫助修復這個bug「TypeError:對象不是函數」

  1. resource.js文件。

     var util = require('util'); 
         var EventEmitter = require('events').EventEmitter; 
    
         function Resource(m){ 
    
          var maxEvents = m; 
          var self = this; 
    
          process.nextTick(function(){ 
           var count = 0; 
    
           self.emit('start'); 
           var t = setInterval(function(){ 
            self.emit('data', ++count); 
    
            if(count === maxEvents){ 
             self.emit('end', count); 
             clearInterval(t); 
            } 
           }, 10); 
          }); 
    
         }; 
    
         util.inherits(Resource, EventEmitter); 
    
  2. 7 extEmitter.js

     var Resource = require('./resource'); 
    
    
         var r = new Resource(7); 
    
    
         r.on('start', function(){ 
          console.log("I've started!"); 
         }); 
    
         r.on('data', function(d){ 
          console.log(" I received data -> " + d); 
         }); 
    
         r.on('end', function(t){ 
          console.log("I'm done, with " + t + " data events."); 
         }); 
    

這裏的錯誤消息我:

  Your code is running at 'http://node.myw714.c9.io'. 
      Important: use 'process.env.PORT' as the port and 'process.env.IP' as the host in your scripts! 
      /var/lib/stickshift/511e07b5500446f25c0001bd/app-root/data/407149/7-extEmitter.js:4 
      var r = new Resource(7); 

      ^
      TypeError: object is not a function 
       at Object. (/var/lib/stickshift/511e07b5500446f25c0001bd/app-root/data/407149/7-extEmitter.js:4:9) 
       at Module._compile (module.js:449:26) 
       at Object.Module._extensions..js (module.js:467:10) 
       at Module.load (module.js:356:32) 
       at Function.Module._load (module.js:312:12) 
       at Module.runMain (module.js:492:10) 
       at process.startup.processNextTick.process._tickCallback (node.js:244:9) 

回答

0

你只需要刪除初始化代碼。

var r = require('./resource'); 


    r.on('start', function(){ 
     console.log("I've started!"); 
    }); 

    r.on('data', function(d){ 
     console.log(" I received data -> " + d); 
    }); 

    r.on('end', function(t){ 
     console.log("I'm done, with " + t + " data events."); 
    }); 

並添加此行的resource.js,如果你希望它是更一般的,你應該改變的功能結構,以便設定值m。

module.exports = new Resource(7); 
0

下的resource.js的utils.inherit文件,你只需要補充一點:

module.exports = Resource; 

的代碼的其餘部分是好的。