簡體   English   中英

允許對express / node.js應用程序的CORS REST請求

[英]Allow CORS REST request to an express/node.js app

我是node.js / express的新手。 我看到這篇文章( 允許對Heroku上的Express / Node.js應用程序提供CORS REST請求 ),但建議的解決方案不起作用。

我只是打電話給mapquest api來獲取一些數據。

這是我的server.js的一部分:

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');

    // intercept OPTIONS method
    if ('OPTIONS' == req.method) {
      console.log('hit options');
      res.send(200);
    }
    else {
      next();
    }
};

app.configure(function(){
  console.log('configuring app');
  app.use(allowCrossDomain);
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public')); 
  //app.use(express.static(path.join(application_root, "public")));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

/**
 * Main route
 */

app.get('/', function (req, res, next) {
  console.log("getting /");
  Project.findAll()
    .success(function (projects) {
      res.render('index', { projects: projects });
    })
    .error(next);
});

這是我的客戶端main.js的一部分:

  $('#spec').click(function(ev){
    var form = $(this);
    $.ajax({
        url: "http://www.mapquestapi.com/geocoding/v1/address?key=<mykey>"
      , type: 'POST'
      , datatype: 'json'
      , contentType: 'json'
      , data: { 
            location : {
            "postalCode":"99999"
            }
          , options : { thumbMaps : false} 
        }
      , success: function(resp){
          $('#mapdata').html(resp);
        }
      , error : function(resp){
          $('#mapdata').html(resp);
        }
    });
  });

以下是chrome dev窗口中的請求標頭:

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, origin, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:www.mapquestapi.com
Origin:http://localhost:3000
Referer:http://localhost:3000/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31

以下是響應標頭:

允許:跟蹤,選項內容長度:0日期:太陽,2013年4月7日03:18:48 GMT服務器:Apache-Coyote / 1.1

這是錯誤消息:

Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin. 

當作為目標的 HTTP服務器有它啟用CORS才有效。 在您的情況下,目標HTTP服務器是www.mapquestapi.com 在您自己的服務器中啟用CORS不會在MapQuest服務器上啟用CORS。

我想你要么需要檢查MapQuest是否支持JSONP(通過MapQuest中的這個示例代碼判斷很可能),或者使用MapQuest提供的地理編碼API

如果這兩個選項不是一個選項,那么您唯一的選擇是在您自己的服務器上創建一個代理,通過該代理可以向MapQuest服務器發送請求(您的服務器將從MQ服務器請求數據並將其發回到你的客戶代碼)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM