Skip to content

Instantly share code, notes, and snippets.

@robertklep
Created April 16, 2013 06:57
Show Gist options
  • Save robertklep/5393914 to your computer and use it in GitHub Desktop.
Save robertklep/5393914 to your computer and use it in GitHub Desktop.
var domain = require('domain');
var fs = require('fs');
var mainDomain = domain.create();
mainDomain.run(function() {
fs.readFile('foo', 'utf8', mainDomain.intercept(function(data) {
console.log(data);
}));
});
mainDomain.on("error", function(error){
console.log('An error occurred', error);
});
@mani-
Copy link

mani- commented Apr 16, 2013

i have tried your example but im getting following error .

    node.js:201
    throw e; // process.nextTick error, or 'error' event on first tick
          ^
   TypeError: Object function Domain(options){

var self = this;

// external use.
var proxy01 = {
    execute:function(cmd,callback){
        self.execute(cmd,callback);
    }
}

// command handle,event handle and aggre use.
var proxy02 = {
    repo:function(typeName){
        return self.repo(typeName);
    }
}

// query handle use.
var proxy03 = {
    // return query function. query type if function.
    query:function(typename){
        return DataStore.get(typename).query();
    }
}

if(!options.mainPath) 
    throw new Error('No set mainPath,please set it.');

var options = options;
for(var k in defaultOptions){
    if(options[k]);
    else{
        options[k] = defaultOptions[k];
    }
}

// bind database.
options.dbs.forEach(function(db){
    new DataStore(db);
})

var Store = options.Store;
var aggreTypes = {};
var repos = {};
var commands = {};
var commandHandles = {};
var eventHandles = {};
var queries = {};
var queryHandles = {};
var services = {};

var eventBus = new EventBus(proxy02);
var commandBus =  new CommandBus(proxy02);
var queryBus = new  QueryBus(proxy03);

// listen aggre update event.
// and to DB store.
eventBus.on('update',function(e){
    var name = e.aggreType.name;
    var db  =  DataStore.get(name);

    if(db){
       db.update(e.agreeId,e.data,function(err){
        if(err) console.log(err);
       })
    }

});

// listen aggre create event.
// add to DB...
eventBus.on('create',function(e){
    var name = e.aggreType;
    var db  =  DataStore.get(name);
    if(db){

    db.save(e._data._data,function(err){
        if(err) console.log(err);
    })
    }
}); 

// listen aggre remove event.
eventBus.on('remove',function(e){
    var name = e.aggreType.name;
    var db  =  DataStore.get(name);
    if(db){
    db.remove(e.agreeId,function(err){
        if(err) console.log(err);
    })
    }
});

load(options.mainPath+options.aggresPath,aggreTypes);
load(options.mainPath+options.commandsPath,commands);
load(options.mainPath+options.commandHandlesPath,commandHandles);
load(options.mainPath+options.eventHandlesPath,eventHandles);
load(options.mainPath+options.servicesPath,services);

for(var k in aggreTypes){
    regAggreType(repos,aggreTypes,aggreTypes[k],options.Store,eventBus);
}

ioc(aggreTypes,proxy02);
bindCommand(commandBus,commands,commandHandles);
bindEventHandle(eventHandles,eventBus);
bindQuery(queryBus,queries,queryHandles)

this.repo = function(typeName){
    return repos[typeName];
}

this.execute = function(cmd,callback){
    var CMD  =  commands[cmd.name];
    var handle = commandHandles[cmd.name];
    if(!handle){
        callback(new Error('no handle.'))
    }else if(!CMD){

    }else{
        try{
            var c = new CMD(cmd.data);
            commandBus.execute(cmd.name,cmd.data,callback);
        }catch(e){
            callback(e);
        }
    }
}

return proxy01;

} has no method 'create'
at Object. (/home/manigandan/workspace/WebMonitoringUsingGoogleAnalytics/errorHandling.js:6:25)
at Module._compile (module.js:441:26)
at Object..js (module.js:459:10)
at Module.load (module.js:348:31)
at Function._load (module.js:308:12)
at Array.0 (module.js:479:10)
at EventEmitter._tickCallback (node.js:192:40)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment