Javascript Parse.com云代码beforeSave()错误:“0”;Uncaught试图用指向新的未保存对象的指针保存对象;
在对象“Hotel”的ACL中,我试图保存“Parse.User”对象的id。我正在beforeSave()中保存ACL。保存对象时,它会给我一个错误,因为“Uncaught试图用指向新的未保存对象的指针保存对象” 这是我无法解决的 分配用户功能:Javascript Parse.com云代码beforeSave()错误:“0”;Uncaught试图用指向新的未保存对象的指针保存对象;,javascript,parse-platform,parse-cloud-code,before-save,Javascript,Parse Platform,Parse Cloud Code,Before Save,在对象“Hotel”的ACL中,我试图保存“Parse.User”对象的id。我正在beforeSave()中保存ACL。保存对象时,它会给我一个错误,因为“Uncaught试图用指向新的未保存对象的指针保存对象” 这是我无法解决的 分配用户功能: exports.assignUser = function(params) { if(!params || !params.userId || !params.id) { console.log(Response.Parame
exports.assignUser = function(params) {
if(!params || !params.userId || !params.id) {
console.log(Response.ParametersEmpty);
params.error(Response.EmptyParameters);
} else {
var Hotel = Parse.Object.extend('Hotel');
var dsQuery = new Parse.Query(Hotel);
dsQuery.equalTo('objectId', params.id);
dsQuery.first({
success: function(_hotel) {
if(_hotel) {
_hotel.set('tempAssignedUser', params.userId);
_hotel.add('users', params.userId);
_hotel.save(null, {
success: function(_hotel) {
params.success(_hotel);
},
error: function(_hotel, error) {
params.error(Response.InternalServerError);
}
});
} else {
params.error(Response.NotFound);
}
},
error: function(error) {
params.error(Response.InternalServerError);
}
});
}
};
beforeSave()
首先确保
hotel.get('tempAssignedUser')
为用户类中存在的用户返回有效的objectId
。另外,我假设在您的Hotel
类中定义了一个名为tempAssignedUser
的字段。现在,您可以在保存之前的中尝试此操作:
Parse.Cloud.beforeSave('Hotel', function(req, res) {
var hotel = req.object;
var hotelACL = new Parse.ACL();
hotelACL.setRoleWriteAccess('ADMIN', true);
hotelACL.setRoleReadAccess('ADMIN', true);
hotelACL.setRoleWriteAccess('SUPER_USER', true);
hotelACL.setRoleReadAccess('SUPER_USER', true);
hotelACL.setPublicReadAccess(true);
if(hotel.get('tempAssignedUser')) {
// fetch the user object
Parse.Cloud.useMasterKey();
var userObject = new Parse.User();
userObject.id = hotel.get('tempAssignedUser');
userObject.fetch().then( function(user) {
hotelACL.setWriteAccess(user, true);
hotelACL.setReadAccess(user, true);
hotel.unset('tempAssignedUser');
hotel.setACL(hotelACL);
res.success();
}, function(error) {
response.error(error);
});
} else {
hotel.setACL(hotelACL);
res.success();
}
});
首先确保hotel.get('tempAssignedUser')
为用户类中存在的用户返回有效的objectId
。另外,我假设在您的Hotel
类中定义了一个名为tempAssignedUser
的字段。现在,您可以在保存之前的中尝试此操作:
Parse.Cloud.beforeSave('Hotel', function(req, res) {
var hotel = req.object;
var hotelACL = new Parse.ACL();
hotelACL.setRoleWriteAccess('ADMIN', true);
hotelACL.setRoleReadAccess('ADMIN', true);
hotelACL.setRoleWriteAccess('SUPER_USER', true);
hotelACL.setRoleReadAccess('SUPER_USER', true);
hotelACL.setPublicReadAccess(true);
if(hotel.get('tempAssignedUser')) {
// fetch the user object
Parse.Cloud.useMasterKey();
var userObject = new Parse.User();
userObject.id = hotel.get('tempAssignedUser');
userObject.fetch().then( function(user) {
hotelACL.setWriteAccess(user, true);
hotelACL.setReadAccess(user, true);
hotel.unset('tempAssignedUser');
hotel.setACL(hotelACL);
res.success();
}, function(error) {
response.error(error);
});
} else {
hotel.setACL(hotelACL);
res.success();
}
});
您正在使用用户ID设置tempAssignedUser。这与使用用户对象设置tempAssingedUser不同。您要做的是设置一个占位符,该占位符是“未保存”的,无论是否保存具有该id的原始对象
您需要首先使用id params.userId获取tempAssignedUser,然后使用Hotel.set设置Hotel的属性(“tempAssignedUser”,fetchedUser)您正在使用userId设置tempAssignedUser。这与使用用户对象设置tempAssingedUser不同。您要做的是设置一个占位符,该占位符是“未保存”的,无论是否保存具有该id的原始对象
您需要首先使用id params.userId获取tempAssignedUser,然后使用Hotel.set设置Hotel的属性(“tempAssignedUser”,fetchedUser)基本上,它表示您正试图用指向用户的指针保存Hotel
对象,但该对象未保存。因此,请尝试保存用户
对象,然后保存酒店
对象。感谢您的回复,但用户对象已保存,然后我分配基本上它表示您正试图保存酒店
对象,并使用指向用户
对象的指针,但该对象未保存。因此,请尝试保存用户
对象,然后保存酒店
对象。感谢您的回复,但用户对象已保存,然后我将继续分配,直到运气不佳:(用户对象ID有效且用户存在您的问题可能是由于此行参数成功(\u Hotel)
您可以停止在响应中返回对象吗。测试成功吗?仍然没有运气:(用户objectId有效,用户存在您的问题可能是由于这行参数。成功(_hotel)
您可以停止在响应中返回对象吗。测试成功吗?谢谢您的回答。我尝试获取用户并设置“tempAssignedUser”与fetchedUser一起使用,但不起作用。它给我相同的错误。酒店中是否包含其他对象?谢谢您的回答。我尝试获取用户并使用fetchedUser设置“tempAssignedUser”,但不起作用。它给我相同的错误酒店中是否包含其他对象?