Angular 5 HttpClient Firefox PUT未执行但可在Chrome

时间:2018-03-19 17:40:10

标签: angular typescript httpclient put

我正在使用Angular 5和CouchDB创建一个网站。在我的database.service.ts中,方法如下所示:

import {HttpClient} from '@angular/common/http';
const auth = my database adress;
constructor(private http: HttpClient) {}

createUser(id: string, email_: string, password_: string, firstname: string, surname_: string, role: string): any {
    const obj: object = {
      name: firstname, surname: surname_, role, email: email_, password: password_, theme: 'indigo', projects: {}, widgets: {}
    };

    return this.http.put(auth + '/' + id, JSON.parse(JSON.stringify(obj)))
      .map((res: Response) => res);
  }

我应该像这样创建用户时调用方法:

 this.databaseService.createUser(id, email, password, firstname, surname, this.role)
        .subscribe(result => {},
          err => {
            console.log(err);
            alert('No connection to database available!');
          });

这在Chrome中运行得非常好,但在Firefox中却不行! PUT甚至没有在Firefox中执行,所以它不会成为CouchDB的问题(我通过wireshark和npcap捕获了流量)。 GET和POST在firefox中运行良好,但PUT没有。标题看起来有了(#34;接受":' application / json'等等......)我不知道什么是错的。

应该至少执行,还是我错了?

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您应该尝试明确指定content-type标头。我与旧客户端有类似的问题,这解决了问题

import { HttpHeaders } from '@angular/common/http';

const httpOptions = {
  headers: new HttpHeaders({
    'content-type':  'application/json'
  })
};
// ...
this.http.put(auth + '/' + id, obj, httpOptions);

答案 1 :(得分:0)

我解决了问题:D 对于couchDB的“auth”Url是 http://username:password@127.0.0.1:5984/my_database

Firefox以错误的方式解释了这一点(我绝对不知道为什么!)但是当我没有验证时,它会起作用。

感谢您的帮助!

答案 2 :(得分:0)

在我的情况下,WebAPI在本地运行。在chrome浏览器中工作正常,但使用Firefox没有任何反应。

结果是Firefox不信任自签名安全证书。只需直接打开WebAPI,即在Firefox中打开https://localhost:3000,然后确认安全异常即可。

那为我解决了这个问题。