简体   繁体   中英

Sending 2 objects in 1 POST request

I'm using Angular and trying to send a request (using $resource ) to an external API but I have the data I need to send in 2 different objects, while I currently only send 1. The API requires user specific actions to include an auth_token with every request.

Without the auth_token , the request would look like this:

APIShop.reg(Cart.data,
function(success) {}, 
function(failure) {}
);

APIShop looks like this:

app.provider('APIShop', function(API_URL) {
    this.$get = ['$resource', function($resource) {
        var Campaign = $resource(API_URL.url + API_URL.loc + ':service/:action/', {service: '@service', action: '@action'},   { 
            'reg':  {method:'POST', isArray: false, params: {service: 'account', action: 'order'}},
            'update':  {method:'PUT', isArray: false, params: {service: 'account', action: 'order'}}
        });
        return Campaign;
    }];
});

Cart.data is an object that looks like: {country: 'US', city: 'Seattle, WA'}

but I need to also add {auth_token: '432078e36c7a42e3c6febdac95f38c1549de6218'} from the User object in the same request. The immediate solution would probably be to add the auth_token field to the Cart object, but as I'm storing this data in the application in various models User , ShoppingCart , etc, I'd like to keep auth_token in the User object.

I tried doing

APIShop.reg(Cart.data, User.auth_token
function(success) {}, 
function(failure) {}
);

didn't expect it to work, and it didn't. The auth_token ends up showing as a Request Payload instead of Query String Parameters .

I also don't want to send something like {country: Cart.data.country, city: Cart.data.city, auth_token: '432078e36c7a42e3c6febdac95f38c1549de6218'} directly (as opposed to sending the object) as that will become a maintenance nightmare sooner or later.

How would I go about sending both pieces of information without adding the token to Cart (since it'll mean I need to add it to every object going forward), or listing all the fields of the object?

Refactor APIShop to receive an array:

APIShop.reg([Cart.data, User.auth_token],
function(success) {}, 
function(failure) {}
);

Or refactor it to receive a mapping object:

APIShop.reg({ data : Cart.data, auth : User.auth_token },
function(success) {}, 
function(failure) {}
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM