2015-07-22 46 views
2

我正在用Node.js和Express創建一個Web應用程序。當我嘗試將我的項目上傳到Heroku時,我的所有內容都在頁面上成功加載,但是當我嘗試執行任何需要對正在使用的API的AJAX調用的操作時,出現錯誤:Blocked Loading Heroku上的HTTP混合內容

混合內容: 'https://farmers-market-finder.herokuapp.com/'的頁面通過HTTPS加載, ,但請求不安全的XMLHttpRequest端點 http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=94118。 此請求已被阻止;內容必須通過HTTPS提供。

我與農貿市場數據的API,美國農業部做出的工作,並遵循了REST風格的AJAX請求他們的建議的格式:

$.ajax({ 
    type: 'GET', 
    url: 'http://search.ams.usda.gov/farmersmarkets/v1/data.svc/mktDetail?id=' + id, 
    async: false, 
    success: function (data) { ... } 
    }) 

我已經做了很多的研究堆溢出和其他網站關於此混合內容錯誤。大多數答案都建議,爲了在Heroku的https服務器上工作,需要將'GET'請求路由改爲「https:// ...」。我試着切換這個,但是到API的路由不再起作用;我收到一個404 Not Found錯誤。我也嘗試將我的路線切換到相對鏈接(只寫入url:'//search.ams ...'),但得到了相同的404錯誤。似乎我確實需要一個http://鏈接來訪問我嘗試訪問的API。

有沒有人知道一種方法讓Heroku允許我使用「http」鏈接而不是https或其他方式成功發出請求?

回答

0

在您的server.js文件中,將此代碼添加到其他app.use語句上方。 (App = expr

app.use(function (req, res, next){ 
    if (req.headers['x-forwarded-proto'] === 'https') { 
    res.redirect('http://' + req.hostname + req.url); 
    } else { 
    next(); 
    } 
});