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?