CORS请求处于反应状态
CORS request in react
尝试使用simple-Twitter:从Twitter API获取内容时出现此错误
XMLHttpRequest cannot load https://api.twitter.com/1.1/statuses/user_timeline.json. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 400
我基本上完全按照react文档中的内容进行操作,但替换了相关行:
componentDidMount: function() {
twitter.get('statuses/user_timeline', function(error, data) {
if(this.isMounted()){
this.setState({tweets: data})
console.dir('callback')
}
}.bind(this));
}
回调函数似乎从未启动,我认为这是由于请求没有完成。
我在这里错过了什么?
这里的问题是您使用的模块是为Node编写的,而不是为浏览器编写的。
在浏览器中,除非请求的资源具有适当的Access-Control-Allow-Origin
标头,否则您不能在来源之外(在本例中为localhost:3000
)发出请求。
在这种情况下,浏览器向同一资源发出飞行前(OPTIONS
)请求,以查看CORS检查是否通过,是否可以安全响应。在这种情况下,它不能,因为Twitter的API不允许你的来源。
如果API支持JSONP,则可以避免这些限制,但从Twitter API的V1.1开始,仅支持OAuth。
这意味着,要从客户端访问Twitter API,您需要在会话内部进行身份验证,以便生成可用于进行请求的OAuth令牌。看看codebird js库。
或者,您可以从服务器使用simple-twitter模块,并将请求从浏览器转发到twitter API。
相关文章:
- 设置两个反应组件之间状态的正确方式
- 推送嵌套对象时的反应状态更改
- 实现已验证用户更新状态的最佳方式,作为对系统中已更改状态的反应.(ASP.NET MVC网站)
- 反应路由器从子类更新父状态
- 针对某个状态禁用整个表单元素.反应
- 反应组件交互和全局状态变化
- 如果我两次使用相同的反应/冗余组件,它们会共享状态吗?
- 反应:状态更改是否会导致整个组件被重绘
- 如何让反应路由器响应 404 状态代码
- 反应本机,错误地设置状态中的项目值
- 反应:有效更新阵列状态
- 如何在反应路由器上的链路中引用状态
- 构建反应/还原应用程序的状态
- 反应.js - 处理哑儿童状态的模式
- 在反应本机中更新状态需要很长时间
- 反应.js - 处于异步数据状态的深层对象不起作用
- 在拉力赛中:我是否可以将自定义任务状态映射到拉力赛任务板中的现有任务状态(类似于用户情景的看板)
- 如何响应应用状态更改?(反应原生)
- 清除状态 es6 反应
- 在重新渲染期间更新状态的反应问题