1

How can i get POST raw body in Meteor restivus? tried something, but it's not working. this is the code.

if(Meteor.isServer) {
    var Api = new Restivus({
        useDefaultAuth: true
    });

    Api.addRoute('test', {authRequired: false}, {
        post: {
            action: function() {
                var response;
                var readable = this.request;
                var rawBody = "";
                readable.on('data', function(chunk) {
                    rawBody += chunk;
                });
                readable.on('end', Meteor.bindEnvironment(function() {
                    //dosometing and insert into Collection
                    //make response data
                }));
                return response;
            }
        }
    });
}

it's proceed return response and then readable.on('end'.. ) so, it's error by return null. if i moved return response into readable.on('end'...), also same error. i think if can wait POST return until readable.on('end'..) is finished, it will be work, but i don't know how.

Kishor
  • 2,659
  • 4
  • 16
  • 34
kevin 00
  • 11
  • 1

1 Answers1

0

You can use node-fibers's Future to wait until readable.on('end', ..) is called.

 if(Meteor.isServer) {
        var Future = Npm.require('fibers/future');
        var Api = new Restivus({
            useDefaultAuth: true
        });
    
        Api.addRoute('test', {authRequired: false}, {
            post: {
                action: function() {
                    var response;
                    var readable = this.request;
                    var rawBody = "";
                    var future = new Future();

                    readable.on('data', function(chunk) {
                        rawBody += chunk;
                    });

                    readable.on('end', Meteor.bindEnvironment(function() {
                        //dosometing and insert into Collection
                        //make response data
                        future.return(response); //response is what you want to return
                        // you can also throw error using future.throw(err);
                    }));

                    return future.wait();
                }
            }
        });
    }
Niteesh
  • 2,742
  • 3
  • 12
  • 33
Kishor
  • 2,659
  • 4
  • 16
  • 34