2013-02-03 44 views
1

我不確定這個問題是否曾在我瀏覽過互聯網尋找關於文件上傳的答案之前被問到過,而我找不到合適的答案。 這是事情:我想上傳一個文件到服務器。這是好的。我發現了大量討論如何將文件上傳到服務器的討論。如何向客戶端提供與Meteor上傳的結果?

現在我的問題是我無法找到一個方法來告訴客戶該文件被有效地上傳或如果有一個錯誤... 我一直在試圖與客戶機上 Meteor.call('methodName', args, function(error, result){//some code});,這對服務器:

Meteor.methods({ 
    saveFile: function (blob, name, path, encoding) { 
     var fs = __meteor_bootstrap__.require('fs'); 
     var path = badgesHelper.cleanPath(path); 
     var name = badgesHelper.cleanName(name || 'file'); 
     var encoding = encoding || 'binary'; 
     path = Meteor.chroot + path + '/'; 
     console.log(path, name, encoding); 

     var uploadResult = {success: false}; 

     fs.writeFile(path + name, blob, encoding, function (error) { 
      if (error) { 
       uploadResult.error = error 
       Meteor.Error(500, 'An error occurred'); 
      } else { 
       var date = new Date(); 
       uploadResult.success = true; 
      } 
     }); 
     return uploadResult; 
    } 
}); 

而我只是無法找到一種方法發送uploadResult地圖到客戶端。由於該調用是異步的,節點在回調函數調用之前觸發「返回」,並且uploadResult具有函數的真實結果... 我不想使用filepicker.io我需要知道如何執行此操作沒有任何包裹。

如果我這樣做是錯誤的方式,請指教,因爲現在我卡住了...

謝謝

+0

終於找到了一種使用訂閱和發佈機制的方式。稍後將發佈:) – MaxouMask

回答

0

這裏不需要地圖,因爲你只返回一個boolean值,你可以直接返回它。如果出現錯誤,您可以丟棄它而不是false。此外,您必須throw new Meteor.Error()而不僅僅是Meteor.Error()

與變化中的代碼:

Meteor.methods({ 
    saveFile: function (blob, name, path, encoding) { 
     var fs = __meteor_bootstrap__.require('fs'); 
     var path = badgesHelper.cleanPath(path); 
     var name = badgesHelper.cleanName(name || 'file'); 
     var encoding = encoding || 'binary'; 
     path = Meteor.chroot + path + '/'; 
     console.log(path, name, encoding); 

     var uploadResult = false; 

     fs.writeFile(path + name, blob, encoding, function (error) { 
      if (error) { 
       // EDIT: Throws an error 
       // error.error = 500; error.reason = "An error occurred"; 
       throw new Meteor.Error(500, 'An error occurred'); 
      } else { 
       // result = true 
       return true; 
      } 
     }); 
    } 
}); 
+1

如果您在Meteor.methods({})中有異步調用,則這不起作用 – MaxouMask

相關問題