ReactJS,试图从JIRA的REST API获取访问JSON数据,但无法这样做。

时间:2018-09-11 21:36:12

标签: javascript json reactjs jira jira-rest-api

我被困了几个小时,试图弄清为什么我无法使用REST API从JIRA中的JSON数据访问和传输数组中的数据。简而言之,通过JIRA REST API文档提供的基本身份验证:https://developer.atlassian.com/server/jira/platform/basic-authentication/,我正在尝试通过URL获取JIRA网站内的JSON数据。在我的本地主机页面的控制台日志中,我似乎收到以下错误消息:跨域读取阻止(CORB)阻止了跨域响应。不太确定如何解决此问题,我的数组中的数据为空(试图获取此数组中的所有JSON数据,但是不起作用)。我不确定是否可以根据在 componentDidMount()方法中通过互联网查询的格式完全正确地提取数据。

感谢您的帮助。

const base64 = require('base-64');

constructor(props)
{
   super(props);
   isLoaded: false,
   jiraData: []
}

componentDidMount()
{
   let headers = new Headers();
   headers.append("Content-Type", "application/json");
   headers.append("Accept", "application/json");
   headers.append('Authorization', 'Basic ' + 
   base64.encode('hiddenusername:hiddenpassword'));

   fetch('http://ksr-ca-qmaltjira.ca.kronos.com:8061/rest/api/2/search?jql=project=SUP&maxResults=2', {method:'GET', headers: headers})
   .then(res => res.json())
   .then(res => {
      this.setState(
      {
        isLoaded: true,
        tableHeight: height + "px",
        jiraData: res
      });

    });

}


render()
{
  var { isLoaded, jiraData } = this.state;
  //Checking whether there is data in my array 
  const emptyOrNot = !!jiraData.length && !!jiraData.length ? <p>not empty</p> : <p>empty</p>
}

return(
 <div className="App">
 {emptyOrNot}
 </div>
)

1 个答案:

答案 0 :(得分:3)

read about CORS in other answers对此进行解释。基本上,除非已将其配置为允许跨域请求,否则您无法从网页向其他来源的服务器发出请求。而且由于您无法控制Jira,因此无法执行此操作。

此外,即使您可以做到这一点,我也强烈建议您这样做,因为您会将用户名和密码暴露给访问您网页的任何人。

构建它的正确方法是创建自己的API,该API可以与Jira对话而无需处理CORS问题(CORS仅适用于来自浏览器的请求)。然后,您可以从此处为您的React应用程序提供服务,或者启用CORS并从任何地方提供服务。这也可以保护您的Jira凭据,因为它们不会在客户端应用程序中公开。