Javascript Parse.com云代码beforeSave()错误:“0”;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

在对象“Hotel”的ACL中,我试图保存“Parse.User”对象的id。我正在beforeSave()中保存ACL。保存对象时,它会给我一个错误,因为“Uncaught试图用指向新的未保存对象的指针保存对象” 这是我无法解决的

分配用户功能:

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”,但不起作用。它给我相同的错误酒店中是否包含其他对象?