铁路由器使用Meteor.call动作抛出writeHead不是一个函数

时间:2016-02-13 07:04:02

标签: javascript node.js meteor iron-router

我正在尝试编写一个从服务器返回到客户端响应的缓冲区。

因此,我已经定义了一条路线,用于在action函数上获取文件:

Router.route('/download/:blabla', {
    name: 'download',
    action: function () {
       var that = this.response;
       Meteor.call('downloadFile', blabla, function (err, result) {
           // error check etc.
           var headers = {
               'Content-type' : 'application/octet-stream',
               'Content-Disposition' : 'attachment; filename=' + fileName
           };
           that.writeHead(200, headers);
           that.end(result);
        }
    }
});

这引发:

  

提供调用'downloadFile'的结果时出现异常:TypeError:   that.writeHead不是函数

没有Metoer.call它可以工作......

我正在使用nodejs流来获取服务器端功能上的缓冲区并且它可以工作。

提前致谢

1 个答案:

答案 0 :(得分:1)

您是否尝试在IR中使用仅服务器端路由?即只能使用`{where:" server"}'使服务器上的路由可访问。为了避免必须按照以下示例从here进行方法调用(请注意,在他的示例中提供文件需要添加meteorhacks:根据注释添加npm包,但您可以避免这种情况...) :

Router.route("/file/:fileName", function() {
  var fileName = this.params.fileName;

  // Read from a file (requires 'meteor add meteorhacks:npm')
  var filePath = "/path/to/pdf/store/" + fileName;
  var fs = Meteor.npmRequire('fs');
  var data = fs.readFileSync(filePath);

  this.response.writeHead(200, {
    "Content-Type": "application/pdf",
    "Content-Length": data.length
  });
  this.response.write(data);
  this.response.end();
}, {
  where: "server"
});