查询JIRA REST API

时间:2016-06-23 13:33:01

标签: rest angular jira jira-rest-java-api

我正在尝试为我们的JIRA板开发D3可视化项目,但我已经陷入了第一道障碍。我在验证和获取JIRA板列表时遇到了麻烦。

此代码完全是客户端的,位于Angular 2 RC 3中。我的服务如下所示:

public authenticate( username:string, password:string ):void {
    let encodedAuth:string = window.btoa( `${username}:${password}` );
    this.headers = new Headers();
    this.headers.append( 'Content-Type', 'application/json' );
    this.headers.append( 'Authorization', `Basic ${encodedAuth}` );
}

public getAllBoards():Observable<Boards> {
    return this.http.get( `http://${this.host}/rest/agile/1.0/board`, this.headers )
        .map( response => response.json() as Boards )
}

我的组件中的代码如下所示:

constructor( protected jiraService:JIRAService ) {
    this.jiraService.authenticate('me@you.com', 'password');
    this.jiraService.getAllBoards().subscribe(
        boards => this.boards = boards
    );
}

不幸的是,这会在我的浏览器中生成看起来像CORS的错误:

XMLHttpRequest cannot load https://myjira.atlassian.net/rest/agile/1.0/board. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 401.

......这有点出乎意料。浏览器中的相同URL工作正常。检查Charles中的请求我看到错误“此主机未启用SSL代理:在代理设置中启用,SSL位置”,但实际上无法找到此设置。我不在乎我实际上是不是在Charles看到它,我只想让它工作!

我已经尝试了几个npm JIRA软件包,但它们都不是很出色,似乎是为服务器端开发而设计的。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

从最初从其他URL加载的应用程序中访问它时,会出现此错误。如果您从这个“其他”URL加载新页面,那么这不是CORS情况,因为初始页面加载已经来自此URL。

服务器需要为浏览器提供预期的CORS标头以允许此请求。这不是Angular问题,只是服务器问题。

解决方法

  • JSONP(不支持自定义标头)
  • 为Angular应用程序调用服务器提供支持服务器端,然后转发给其他服务器,然后将其获取的响应转发给Angular应用程序。