CORS让我发疯 - 间歇性的问题

时间:2014-08-03 05:34:41

标签: ajax node.js cors

似乎我已经尝试了所有内容,最后我转而使用CORS npm module

var cors = require('cors');

我的一条路线我想使用CORS:

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

我正在Google环聊中实施自定义应用,但需要发布到我的服务器,并且环聊是从Google服务器运行的。我将AJAX调用放在一个循环上,以便它继续尝试 - 这篇文章对我的应用程序至关重要。

以下是环聊应用中的相关AJAX调用:

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
            };
        }
    });
};

让我发疯的是,有时它会在第一时间完成,有时需要5次。整个过程非常缓慢。这是我没有得到的日志:

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.

我在Heroku上使用Node + Express~4。

1 个答案:

答案 0 :(得分:0)

我认为问题与飞行前请求有关。我将AJAX调用更改为以下内容:

  $.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;
    }
});

它是第一次没有延迟直接通过。