Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [nodejs] problema con request.body

    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?

  2. #2
    risolto!
    sembra banale aver invertito le chiamate alle funzioni, avevo già provato in precedenza e non funzionava, ma mi rimangono comunque ancora molti interrogativi. Andiamo avanti. Per un po' almeno avrò smesso di

    codice:
         var server = connect.createServer(	dispatch({     
                            "/todo/stats/init": function(req,res,next){
                                
                                 common.readjson(req,function(json)
                                 {
                                    initEntry(json);
                                    common.sendjson(res,{ok:true,id:json.id});
                                 }) 
                              },
                             "/todo/stats/collect/:id": function(req,res,next,id){
                                        
                                 var id = id;
                                        
                                 common.readjson(req,function(body)
    			     {       
                                     saveEntry(id,body);
                                 });     
                                 common.sendjson(res,{ok:true,id:id});      
                              },
                })
    );
    Ultima modifica di lucker; 12-08-2014 a 19:08

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.