8

画像を生成する流星アプリケーションがあります。それらが生成されたら、それらを提供したいと思います。しかし、パブリック フォルダーに書き込むたびに、Meteor サーバーが再起動します。解決策を検索したところ、いくつかの回避策が見つかりました。

  • プロジェクト フォルダー外のファイルを提供する - 現時点ではこれを実現する方法がわかりません。Meteor に統合するある種のミドルウェアを作成する必要がありますか?

  • チルダ ~ をフォルダーに追加しpublic/ます。これにより、ルートページにリダイレクトされるフォルダー内のファイルにアクセスしようとすると、流星がフォルダーを完全に無視するようになります。

  • 本番モードで流星を実行します。私にとっては汚い回避策のようです。今meteor run --productionでもサーバーを再起動しているため、アプリをバンドルし、ファイバーを毎回再インストールし、環境変数を設定してからアプリを実行する必要があります。何かを変えるたびに。

そこに他の解決策はありますか?

4

4 に答える 4

3

だから私はiron:routerでこれを解決しました。meteor フォルダーassetsに、 フォルダーを作成しました。次に、ファイルを提供するためにこのようなコードがあります

var fs = Npm.require('fs');
var path = Npm.require('path');

Router.map(function () {
  this.route('assets', {
    where: 'server',
    path: '/assets/:filename(.*)',
    action: function() {
      var basePath = process.env.ASSET_PATH;
      var filename = path.normalize(path.join(basePath, this.params.filename));
      var res = this.response;
      if (filename.substr(0, basePath.length) != basePath ||
          !fs.existsSync(filename) ||
          !fs.statSync(filename).isFile()) {
        res.writeHead(404, {'Content-Type': 'text/html'});
        res.end('404: no such asset: ' + this.params.filename);
        return;
      }
      var data = fs.readFileSync(filename);
      var mimeType = mime.lookup(filename);
      res.writeHead(200, { 'Content-Type': mimeType });
      res.write(data);
      res.end();
    },
  });
});

Mimeルックアップは次のようになります

var mime = {
  lookup: (function() {

    var mimeTypes = {
      ".html": "text/html",
      ".js":   "application/javascript",
      ".json": "application/json",
      ".png":  "image/png",
      ".gif":  "image/gif",
      ".jpg":  "image/jpg",
    };

    return function(name) {
      var type = mimeTypes[path.extname(name)];
      return type || "text/html";
    };
  }()),
};

そのコードはサーバー上でのみ実行されるため、サーバーフォルダーに配置するか、チェックされていることを確認してif (Meteor.isServer)ください。

上記のように、アセット フォルダーへのパスに環境変数を使用しています。だから私はこのように隕石を走らせることができます

ASSET_PATH=/some/path/to/assets meteor

およびモジュールにはmeteorhacks:npmモジュールも使用しています。fspath

于 2015-10-17T11:46:46.467 に答える