我正在使用Node.js和Express创建一个Web应用程序。当我尝试将项目上传到Heroku时,我的所有内容都在页面上成功加载,但是当我尝试执行任何需要对API进行AJAX调用的操作时,我收到错误:我正在使用:
混合内容:页面位于 ' https://farmers-market-finder.herokuapp.com/'是通过HTTPS加载的, 但是请求了一个不安全的XMLHttpRequest端点 http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=94118。 此请求已被阻止;内容必须通过HTTPS提供。
我正在使用由美国农业部制作的农民市场数据API,并遵循他们建议的RESTful AJAX请求格式:
$.ajax({
type: 'GET',
url: 'http://search.ams.usda.gov/farmersmarkets/v1/data.svc/mktDetail?id=' + id,
async: false,
success: function (data) { ... }
})
我已就Stack Overflow和其他网站对此混合内容错误进行了大量研究。大多数答案表明' GET'请求路由需要更改为" https://..."为了使用Heroku的https服务器。我试过切换它,但到API的路径不再有效;我收到404 Not Found错误。我也尝试将我的路线切换到相对链接(只是写url:' // search.ams ...')但是得到了相同的404错误。好像我确实需要一个http://链接来访问我尝试访问的API。
有没有人知道如何让Heroku允许我使用" http"链接,而不是https,或其他一些方式成功发出请求?
答案 0 :(得分:1)
In your server.js file, add this code above your other app.use statements. (App = expr
app.use(function (req, res, next){
if (req.headers['x-forwarded-proto'] === 'https') {
res.redirect('http://' + req.hostname + req.url);
} else {
next();
}
});