CORS is driving me crazy - intermittent issues

It seems like I've tried everything and I finally just switched to using the CORS npm module:

var cors = require('cors');

And my one route I want to use CORS on:

app.post('/hangouts', cors(), hangoutsController.hangouts); // user CORS

I'm implementing a custom app in Google Hangouts, but need to post to my server, and the Hangout is run from a Google server. I put the AJAX call on a loop so that it will keep trying - this post going through is crucial to my app.

Here's the relevant AJAX call in the Hangout app:

var shouldpostHangoutId = true;

/* Post the Hangout ID to server */
var postHangoutId = function(hangoutId) {

  var startData = gapi.hangout.getStartData();

  $.ajax({
        type: 'POST',
        url: rootURL + "/hangouts", 
        crossDomain: true,             
        dataType: "json",                 
        data: {
            "hangouts_id" : hangoutId,
            "start_data" : startData
        },

        success: function( response ) {
            console.log( "postHangoutId -- success" ); // server response
            console.log( response ); // server response
            shouldpostHangoutId = false;
        },

        error: function(xhr, textStatus, error){
            console.log( "postHangoutId -- error" ); // server response
            console.log(xhr.statusText);
            console.log(textStatus);
            console.log("error = " + error);

            // Try again
            if (shouldpostHangoutId) {
              postHangoutId(hangoutId); // Try again
            };
        }
    });
};

What's driving me crazy is that sometimes it goes through on the first go, sometimes it takes 5 times. And the whole process is super slow. Here's the log I get when it doesn't come through:

XMLHttpRequest cannot load https://www.foo.bar/hangouts. No 'Access-Control-Allow-Origin' header
is present on the requested resource. Origin 'https://ts6d5n5om59gt6cin9c39faccjf890k5-a-hangout-
opensocial.googleusercontent.com' is therefore not allowed access.

I'm using Node + Express ~4 on Heroku.

I think the problem had something to do with pre-flight requests. I changed the AJAX call to the following:

  $.ajax({
    type: 'POST',
    url: rootURL + "/hangouts", 
    dataType: "json",                 
    data: {
        "hangouts_id" : hangoutId,
        "start_data" : startData
    },

    error: function( error ){

        // Log any error.
        console.log( "ERROR:", error );

        // Try again
        if (shouldpostHangoutId) {
          postHangoutId(hangoutId); // Try again
        };

    },
    complete: function(){
       console.log( "postHangoutId -- success" ); // server response
      shouldpostHangoutId = false;
    }
});

And it goes right through, first time without delay.