在Angular2中使用RabbitMQ RESTful服务

时间:2017-07-14 16:55:59

标签: angular rest typescript rabbitmq

我目前正在开发一个项目,我需要访问连接到已确定的Rabbitmq的所有队列。为此,我试图使用rabbitmq的RESTful服务获取此信息。我尝试使用POSTman做一些例子,比如发送一个请求到localhost:15672 / api / connections with guest:guest作为用户名和密码,一切正常;但是,当我尝试使用我在Angular上的项目发送相同的请求时,出现以下错误消息:

  

zone.js:2177 XMLHttpRequest无法加载localhost:15672 / api / overview。交叉源请求仅支持协议方案:http,数据,chrome,chrome-extension,https。

我对这个错误进行了一些研究,我发现的所有解决方案都建议我允许Chrome上的浏览器发出CORS请求,但这个解决方案要求我更改每个运行我项目的浏览器,没有效果。任何人都知道使用Angular 2应用程序获取Rabbitmq信息的另一种方式吗?

提前致谢!

编辑:

此外,如果我在请求开头添加“http://”,则错误消息将更改为:

  

XMLHttpRequest无法加载http://localhost:15672/api/overview。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:4200”访问。响应的HTTP状态代码为405。

以下是我的代码的样子:

@Injectable()
export class RabbitHttp {

protected headers: Headers;

constructor(private http: Http, private router: Router,
    public globalService: GlobalService
) {
}
  public get(url: string, parameters: any): Promise<Response> {
    url = "http://" + url;
    this.setDefaultHeaders(parameters, url);
    return this.http.get(url, { headers: this.headers }).toPromise();
};
private setDefaultHeaders(data: any,  url: string): void {
    this.headers = new Headers();
    this.headers.append("Content-Type", "application/json");
    this.headers.append("Authorization", "Basic " + data);
    this.headers.append("Access-Control-Allow-Origin", url);
}
}

使用命令

启用的6个默认插件启动了Rabbit服务
  

rabbitmq-plugins启用rabbitmq_management

对于url和参数,函数中收到的url是localhost:15672 / api / overview,参数是guest:guest

1 个答案:

答案 0 :(得分:0)

当请求包含Origin标头(match_origin函数)时,您可以在this code中看到返回的CORS标头

使用Angular创建的请求必须包含Origin标题。