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 フックでクライアント/サーバーに何も記録しないのはなぜですか?