6

S3 インタラクションに Autoform と Slingshot を使用しています。ユーザーがフォームを送信すると、プロセスをインターセプトし、Slingshot を介してファイルを S3 にアップロードdocし、返されたオブジェクトを拡張してdownloadUrl、その時点で新しい更新されたドキュメントを返し、オートフォーム プロセスを続行します。

次のコードがあります。

{{#autoForm collection="Tabs" id="newTabForm" type="method" meteormethod="createTab"}}

   ...
    <div class="modal-body">
      <fieldset>
         {{> afFormGroup name='downloadUrl' type='file' class='file-bag'}}
    ...

AutoForm.hooks({
  newTabForm: {
    before: {
      insert: function(doc, template) {
        console.log(doc);
        var file     = $('.file-bag')[0].files[0];

        var self = this;
        uploader.send(file, function(error, downloadUrl) {
          if (error) { throw new Meteor.Error(error); }

          doc = _.extend(doc, { downloadUrl: downloadUrl });
          self.result(doc);
        });
      }
    },
 ....

Meteor.methods({
createTab: function(doc) {
  check(doc, TabSchema);

  var priceInCents = doc.price * 100;
  var extraTabAttributes = {
    userId: Meteor.userId(),
    price: priceInCents
  };

  _.extend(doc, extraTabAttributes);
  Tabs.insert(doc, function(error, result) {
    if (error) { return error; }
  });
}

ドキュメントにURLを正しく保存します(ただし、奇妙に見えますが、C://fakepath/filename ..)が、S3サーバーへのアップロードに失敗します

副次的な質問ですconsole.log(doc);が、 before フックでクライアント/サーバーに何も記録しないのはなぜですか?

4

1 に答える 1