2

Meteor をバックエンドとして静的 html ジェネレーター (管理 UI を使用) を作成するというアイデアをいじっています。

トリガーされると、パブリックフォルダーに新しいファイルが作成され、作成者が html に埋め込まれた iframe で即座にレビューできるようにします。

ファイルは作成されますが、次の 2 つの副作用が発生します。

  1. サーバーが再起動されます。
  2. ファイルはキャッシュされるため、ユーザーは変更が行われたことを確認できません。

何か案は?

if (Meteor.is_client) {

  Template.hello.events = {
    'click input' : function () {
      Meteor.call('makeFile', 'filename.html', function(error, result){
        alert(result);
      });
     //window.location = '/filename.txt';

      // template data, if any, is available in 'this'
      if (typeof console !== 'undefined')
        console.log("You pressed the button");
    }
  };
}

if (Meteor.is_server) {
   var fs = __meteor_bootstrap__.require('fs');
  Meteor.startup(function () {
    // code to run on server at startup

  });
  Meteor.methods({
    'makeFile': function(fileName) {
      /*
      fs.unlink("public/"+fileName, function (err) {
        if (err) throw err;
        console.log('successfully deleted ');
      });
  */
      fs.writeFile("public/"+fileName, "<html><body><h1>test</h1></body></html>", function(err) {
        if(err) {
          console.log(err);
        } else {
          console.log("The file was saved! "+ fileName);


        }
      });
      return fileName;
    }
  });
}
4

1 に答える 1

2

meteor サブディレクトリ内のファイルを変更するたびに、meteor サーバーが再起動すると思います。したがって、これを防ぐには、流星アプリのディレクトリ内にファイルを書き込まないでください。created_files ディレクトリを 1 レベル上げるか、何かします。とにかく、生成されたファイルをそれらを生成しているコードから分離することは良い考えです。

管理インターフェイスでコンテンツを表示する最も簡単な方法は、おそらくデータベースに書き込むことです (ディレクトリの変更を監視しようとするのではなく)。Meteor はデータベースの更新を監視するように設計されているため、車輪を再発明する意味はありません。

コレクションを作成します (一番上にあるので、クライアントとサーバーにあります):

GeneratedFiles = new Meteor.Collection("generated_files");

次に、ファイルの内容を変数に代入してから、それらを書き込む前に、fs.writeFileコールバックで次のようにします。

if(err) {
  console.log(err);
} else {
  GeneratedFiles.insert({name: fileName, contents: fileContents});
  console.log("The file was saved! "+ fileName);
}

次に、ファイルの内容をクライアント コードのテンプレートに自動公開します (iframe を使用する理由がわからない場合は、div が正常に機能するようですが、どちらの方法でもおそらく機能します)。

それが役立つことを願っています。そして幸運を祈ります。Meteor はこの種の素晴らしいフレームワークだと思います。私が使用する管理インターフェースのほとんどは、依然として完全に同期的であり、操作が煩わしいだけです。

于 2012-04-29T17:20:27.793 に答える