Sono in fase di studio e mi ritrovo a dover modificare uno script obsoleto.
Ho seguito varie strade ma non riesco a trovare l'inghippo.

caso 1 - utilizzo modulo DISPATCH.JS

codice:
var common = require('./common.js');
var connect = common.connect;
var dispatch = common.dispatch;
var mongo = common.mongo;

var server = connect.createServer(
dispatch({                       
              "/todo/stats/init": function(req,res,next){              
                   common.sendjson(res,{ok:true});
                   common.readjson(req,function(body){initEntry(body)});
             },
              "/todo/stats/collect/:id": function(req,res,next,id){
                   var id = id;
                   common.sendjson(res,{ok:true,id:id});
                   common.readjson(req,function(body){
                       saveEntry(id,body);
             });
            })    
);


mongo.init('todo','127.0.0.1');
mongo.open();
server.listen(3000,"127.0.0.1");


// nel file common.js
exports.readjson = function(req,res,win) {
  
  var bodyarr = [];
  req.on('data',function(chunk){
    bodyarr.push(chunk);
  })
  req.on('end',function(){
    
    var bodystr = bodyarr.join('');
    util.debug('READJSON:'+req.url+':'+bodystr);
    if(bodystr.length > 0)
    {
        var body = JSON.parse(bodystr);
        win && win(body);
    }
    
  })
}


exports.sendjson = function(res,obj){
    
    var objstr = JSON.stringify(obj);
    res.writeHead(200,"OK",{
        'Content-Length':Buffer.byteLength(objstr),
        'Content-Type':'text/json'
    });
    
    util.debug('SENDJSON:'+objstr);
    res.end(objstr);
}
il dispatch funziona per tutti e 2 i POST
curl -d '{"id":"a"}' http://127.0.0.1/todo/stats/init
curl http://127.0.0.1/todo/stats/collect/a -d '{"time":1294424743926,"total":5,"done":2}'

le funzioni initEntry(body) e saveEntry(body) vengono chiamate correttamente ma nessun parametro viene passato (req.params, req.body etc...) quindi nulla viene memorizzato su mongoDB.

caso 2 : utilizzando modulo HTTPDISPATCHER.JS

codice:
dispatcher.onPost("/todo/stats/init", function(req,res){
    common.sendjson(res,{ok:true});
    common.readjson(req,function(body){
            initEntry(body);
    });


    
});


dispatcher.onPost("/todo/stats/collect/:id", function(req,res){
    var id = req.params.id;
    common.sendjson(res,{ok:true,id:id});
    common.readjson(req,function(body){
        saveEntry(id,body);
    });
});


var server = http.createServer(function(req,res){
    dispatcher.dispatch(req,res);


});
in questo secondo caso il primo POST viene eseguito perfettamente, vengono passati i parametri a initEntry(body) e il nuovo item viene aggiunto al database, ma il secondo POST non viene chiamato e ritorna un error 404.

ho provato anche con EXPRESS ma stessi errori del caso 1.
Qualcuno può aiutarmi? Ho fatto troppa confusione?