2011-11-09 69 views
5

我有這樣的API使用的NodeJS快車建:如何使Web服務可用於跨域訪問?

app.get('/api/v1/:search', function(req, res){ 
     var response = {} 
     res.contentType('application/json'); 
       // process req.params['search'] 
       // build and send response 
       res.send(response, response.status_code); 
      }); 

不過,我需要一個客戶端,將坐在另一個域。我該如何修正這段代碼,以便像JQuery $ .ajax等那樣調用它。

回答

13

像這樣的東西應該工作:

//Middleware: Allows cross-domain requests (CORS) 
var allowCrossDomain = function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
    res.header('Access-Control-Allow-Headers', 'Content-Type'); 

    next(); 
} 

//App config 
app.configure(function() { 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: 'secret' })); 
    app.use(express.methodOverride()); 
    app.use(allowCrossDomain); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
}); 
+0

注意:如果有人正在看這個,而沒有看到它,app.use(allowCrossDomain);來自// App配置部分是你的app.configure()部分代碼的關鍵組件...(你必須擁有所有的中間件代碼) – cmcculloh

+0

謝謝mate ..你節省了我很多時間。 。 – whizcreed

0

This可能對您有所幫助。

儘管我認爲JQuery已經開始使用隱藏的iframe支持跨域請求,但我不確定。

+0

我喜歡黑客,很酷。但是,我需要使用標準方式使跨網域訪問Web服務,API將是一個公共API,這就是爲什麼。 – xybrek