0

Meteor.call() を同期的に (コールバックなしで) 実行すると、ある場所からダウンロードされ、サーバー上にファイルが正常に生成されます。

ただし、ファイルの生成に数秒かかる場合があり、ファイルが存在する前にリダイレクトします。

Futures と Fibers を使用しようとしましたが、これでブロックできるかどうかはわかりません (ファイルの書き込みが完了するまで待ちます)。

if (Meteor.isServer) {
  var request = Npm.require('request');
  var fs = Npm.require('fs');
  var Future = Npm.require('fibers/future'), wait = Future.wait;
  Fiber = Npm.require('fibers');

var result = function(){
            downloadAndSaveFile(content.pdf, filename).wait();
          }.future();

 function downloadAndSaveFile(fileUrl, fileName) {
    var future = new Future;
    request(fileUrl).pipe(fs.createWriteStream(getPath() + fileName)).on('closed', function(){
      future.return();
    });
    return future;
  }

}
4

1 に答える 1

0

Meteor のルーター.to機能はクライアント側のみであり、ルーティング コールバックを呼び出すために使用されます。ブラウザーに物理的にリダイレクトするように指示するのではなく、DOM をスワップアウトして、テンプレートとルートに応じて新しいページを反映するだけです。

リダイレクトしたい場合は、使用する必要があります

window.location = 'newurl';

または、ユーザーがクリックして.callコールバックから作成されたリンク。

于 2013-09-05T00:35:30.857 に答える