从Template.event到铁路中的HTTP post调用:router + meteor

时间:2015-07-02 22:08:01

标签: meteor

我想在meteor中使用Template.event中的post参数创建HTTP.call。我已经在铁路中定义了路由:我当前应用的路由器路由。 路线正在接听电话,但我无法获得帖子参数。该路由是服务器端路由,并使用以下命令返回pdf内容:

Template.eStatement.events({
    'click .pdf': function (event, template){ 
         event.preventDefault(); 
         param = Some json object that I need to pass as post parameter.
         HTTP.call("POST", '/statement', JSON.stringify(param), 
         function(error, result){ if(result){ // } if(error){ // } //done(); }); }}); 

这是我的路线(我正在使用铁:流星的航线包)

Router.route('/statement', function () { 
var param = JSON.parse(this.params.query.param); 
/** Get the pdf content by calling the api 
/** Write the content back : 
this.response.writeHeader('200', { 
'Content-Type': 'text/html', 
'Content-Disposition': "inline", 
});
this.response.write('pdfcontent');
this.response.end(); },{where: 'server'}

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

在客户端:(在客户端/文件夹中)

Template.eStatement.events({
  'click .pdf': function (event, template) {
    var params = {
      something: 'abcdef',
      someOption: true
    };
    HTTP.call('POST', '/statement', {
      data: params
    }, function (error, result) {
      console.log('http callback');
      console.log(error);
      console.log(result);
    });
  }
});

在服务器上:(在服务器/文件夹中)

Router.route('/statement', {
  where: 'server',
  action: function () {
    var params = this.request.body;

    // do something with params

    this.response.writeHeader('200', {
      'Content-Type': 'text/html',
      'Content-Disposition': "inline"
    });
    this.response.write('pdfcontent');
    this.response.end();
  }
});

请记住,在路线中,this.request.body在这种情况下是一个对象,而不是一个字符串。因此,您无需使用JSON.stringifyJSON.parse来处理此问题。