1

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'.. ) 返しますので、リターンヌルでエラーです。返信を に移動した場合readable.on('end'...)も、同じエラーが発生します。終了するまで POST リターンを待つことができればうまくreadable.on('end'..)いくと思いますが、方法がわかりません。

4

1 に答える 1

0

が呼び出されるまでnode-fibersFutureを使用できます。waitreadable.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();
                }
            }
        });
    }
于 2016-03-08T03:41:50.760 に答える