我建立一个应用程序做出反应,我想打个电话给https://itunes.apple.com/search?term=jack+johnson快递+ CORS()无法正常工作
我有一个助手叫requestHelper.js它看起来像:
import 'whatwg-fetch';
function parseJSON(response) {
return response.json();
}
function checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response;
}
const error = new Error(response.statusText);
error.response = response;
throw error;
}
export default function request(url, options) {
return fetch(url, options)
.then(checkStatus)
.then(parseJSON);
}
所以我得到:
的XMLHttpRequest无法加载 https://itunes.apple.com/search?term=jack%20johnson。否 “访问控制 - 允许来源”标题出现在请求的 资源中。原因'http://localhost:3000'因此不允许 访问。
我Express服务器看起来是这样的:
const ip = require('ip');
const cors = require('cors');
const path = require('path');
const express = require('express');
const port = process.env.PORT || 3000;
const resolve = require('path').resolve;
const app = express();
app.use(cors());
app.use('/', express.static(resolve(process.cwd(), 'dist')));
app.get('*', function(req, res) {
res.sendFile(path.resolve(resolve(process.cwd(), 'dist'), 'index.html'))
});
// Start app
app.listen(port, (err) => {
if (err) {
console.error(err.message);
return false;
}
const divider = '\n-----------------------------------';
console.log('Server started ✓');
console.log(`Access URLs:${divider}\n
Localhost: http://localhost:${port}
LAN: http://${ip.address()}:${port}
${divider}
`);
});
我一直在使用mode: 'no-cors'
尝试,但实际上不是我所需要的,因为反应是空的。
我在做这个配置有问题吗?
了解!就一个问题。 为什么它会工作,如果我从快递中读取数据,是不是一样? – JoseAPL
这是不一样的。 Express无法访问apple.com有权访问的浏览器的任何识别特征(例如cookie或发送来自属于用户的IP的请求的能力)。 – Quentin
因为express和Node没有在Web浏览器内执行。这是浏览器,而不是服务,强制执行单一来源策略。 Web服务本身只能通知浏览器是否允许CORS。节点是JavaScript,但是是独立的,它不是一个网络浏览器,并不像一个。 – PMV