我怎样才能在Meteor restivus中获得POST原始身体?

时间:2016-03-08 01:20:58

标签: meteor http-post asynccallback restivus

如何在Meteor restivus中获得POST原始身体? 尝试了一些东西,但它没有用。 这是代码。

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;
            }
        }
    });
}

它继续返回响应然后readable.on('end'.. ) 所以,返回null会导致错误。 如果我将回复响应移动到readable.on('end'...),也是同样的错误。 我想如果可以等到POST返回readable.on('end'..)完成,它会起作用,但我不知道如何。

1 个答案:

答案 0 :(得分:0)

您可以使用node-fibersFuturewait,直到readable.on('end', ..)被调用。

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();
            }
        }
    });
}