2016-07-22 69 views
0

我想在分析服務器上編寫一個簡單的雲代碼函數來更新用戶的參數。我的功能如下:Parse.com更新用戶雲代碼給出錯誤206:無法修改用戶

Parse.Cloud.define("updateUser", function(request, response) { 
    var query = new Parse.Query("User"); 
    query.equalTo("username", request.params.username); 
    var type = request.params.type; 
    query.first({ 
     success: function (user) { 
      user.set("userType", type); 
      user.save(null, { 
       success: function (object) { 
        response.success("SUCCESS"); 
       }, error: function (object, error) { 
        response.error(error); 
       } 
      }); 
     }, error: function (error) { 
      response.error(error); 
     } 
    }); 
}); 

這是我如何調用該函數的服務器端從快速的Node.js應用:

Parse.Cloud.run("updateUser", { useMasterKey: true, username: req.body.username, type: req.body.type }, { 
    success: function(final) { 
     res.send({ res: "SUCCESS" }); 
    }, error: function(error) { 
     res.send({ res: error }); 
    } 
}); 

第一個查詢返回用戶,但隨後的保存拋出「206:無法修改用戶」錯誤。

這個函數在我們以前的平臺上工作得很好,但現在在Parse Server上導致問題。

任何幫助,非常感謝。

+0

你必須使用主密鑰,它們改變了你如何處理雲代碼中的主密鑰與parse-server ...檢查他們的github –

+0

當我調用函數 - {useMasterKey:true}時,我確實指定了主密鑰。這是根據他們的文件 –

回答

1

useMasterKey應發送到您的雲代碼方法的user.save(),並在您的代碼中,您從nodeJS應用程序發送了useMasterKey。

所以在最後你的代碼應該如下所示:

Parse.Cloud.define("updateUser", function(request, response) { 
var query = new Parse.Query("User"); 
query.equalTo("username", request.params.username); 
var type = request.params.type; 
query.first({ 
    success: function (user) { 
     user.set("userType", type); 
     user.save({useMasterKey : true}, { 
      success: function (object) { 
       response.success("SUCCESS"); 
      }, error: function (object, error) { 
       response.error(error); 
      } 
     }); 
    }, error: function (error) { 
     response.error(error); 
    } 
}); 

});

我也會根據最佳實踐將我的代碼更改爲使用Promises和arrow函數。

希望它有幫助。