NodeJs app对象反射,这是空的

时间:2015-01-27 11:34:36

标签: node.js

我使用的是node.js和this,而this.global是空的 有谁知道为什么它是空的? 这是代码:

var business_object = require('./user.js');
var node_framework = require('./trace-meldaround.js');
var user = new business_object.User('Leo');
var thisObj = this;
var globalObj = this.global;
var methods = [];

for (var method in thisObj) {
    if (typeof thisObj[method] == 'function') {
        methods.push(method);
    }

    for (var method in globalObj) {
        if (typeof globalObj[method] == 'function') {
            methods.push(method);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我终于自己想出来并决定发布我发现的内容。 对于Node.js,“this”为空,但模块有导出。所以你必须反思出口。

所以这是我的代码,它向您展示如何使用模块设置node.js应用程序以及如何使用Node.js进行反射

file:app-separate-files.js - 使用cujo.js meld.js 我创建了面向方面编程(AOP)容器框架:

var business_object = require('./user.js');
var node_framework = require('./trace-meldaround.js');
var user = new business_object.User('Leo');

var trace = new node_framework.Trace('Hello Meld App');
trace.doTrace();
user.sayHello();
user.sayGoodBye();


and here is the AOP Framework Container:
trace-meldaround.js

var meld, joinPoint;
meld = require('./meld.js');
joinPoint = meld.joinpoint;
var log4js = require('./node_framework/log4js-node-master/lib/log4js'); // include log4js
log4js.configure({ // configure to use all types in different files.
    appenders: [
        {   type: 'file',
            filename: '../logs/error.log', // specify the path where u want logs folder error.log
            category: 'error',
            maxLogSize: 20480,
            backups: 10
        },
        {   type: 'file',
            filename: '../logs/info.log', // specify the path where u want logs folder info.log
            category: 'info',
            maxLogSize: 20480,
            backups: 10
        },
        {   type: 'file',
            filename: '../logs/debug.log', // specify the path where u want logs folder debug.log
            category: 'debug',
            maxLogSize: 20480,
            backups: 10
        }
    ]
});
var loggerinfo = log4js.getLogger('info'); // initialize the var to use.
var loggererror = log4js.getLogger('error'); // initialize the var to use.
var loggerdebug = log4js.getLogger('debug'); // initialize the var to use.
var Trace = function(AppName){
 this.appName = AppName;
 };

 Trace.prototype.doTrace = function(){

  function sayMeld(jp) {   
   console.log('meldaround function called for Application : ' + Trace.constructor.AppName);
   console.log('JoinPoint Method: ' +  jp.method);
   console.log('JoinPoint Target: ' + jp.target);
   console.log('JoinPoint Args: ' + jp.args.toString());
   console.log('JoinPoint Result: ' + jp.result);
   console.log('JoinPoint Exception: ' + jp.exception);
   loggerinfo.info('Calling Method: ' + jp.method);
   loggererror.info('This is Error Logger');
   loggerdebug.info('JoinPoint Method: ' +  jp.method);
   loggerdebug.info('JoinPoint Target: ' + jp.target);
   loggerdebug.info('JoinPoint Args: ' + jp.args.toString());
   loggerdebug.info('JoinPoint Result: ' + jp.result);
   loggerdebug.info('JoinPoint Exception: ' + jp.exception);   
  }


  var appObjects = module.parent.children;  
  var methods = [];
  var objects = [];
  for (var i=0; i<appObjects.length;i++){ 
   if (typeof appObjects[i] == 'object'){
     objects.push(appObjects[i]);

     var funcObj = appObjects[i].exports;
     if (typeof funcObj == 'object')
     {
      for (var key in funcObj){
       var k =0;
       var prototypeObj = funcObj[key].prototype;
       methods[i] = [];
       for (var proto in prototypeObj){                            
         methods[i][k] = proto;
         k++;
       }                    
      }
     }     
    }
  }

  for (var j=0; j<objects.length; j++){
   var ObjectName;
   for (var key2 in objects[j].exports){    
    ObjectName = key2;
    console.log(objects[j].exports[ObjectName].prototype);

    for (var n=0; n<methods[j].length; n++){
     if (ObjectName != 'Trace'){
     meld.around(objects[j].exports[ObjectName].prototype, methods[j][n], function(joinPoint){
      sayMeld(joinPoint);

      joinPoint.proceed();
     }); 
     }
    }
   }      
 }

  //meld.around(User.constructor.prototype, 'sayHello', function(joinPoint){
 };
 exports.Trace = Trace;