如何解决Angular Http Post Request发送多次的问题?

时间:2019-05-03 17:15:55

标签: angular http post

我正在调试我的APIService的Post方法,该方法有时会发送两次。这很难调试,因为它有时仅在Post请求中发生。例如,当用户发起创建操作时,在创建新用户时,服务器有时会回答“该用户已存在!”。当我知道一个事实不存在时。

在问题出现后立即查看服务器日志,发现该调用被发送了两次。第一个请求成功创建了该用户,第二个呼叫表明该用户已存在于上一个请求中。因此服务器说,该用户已经存在!这些请求一个接一个地发生,但并非总是如此。服务器也不总是得到2个请求。有时它会按预期运行,然后每隔一段时间就会发布两次...

我尝试将console.log放在ApiService Post方法中,即使发生两次Post,它也会显示一次。我很困惑...

在ApiService中调用Post方法的CreateUser操作:

  @Action(CreateUser)
  createUser(sc: StateContext<AdminTreeStateModel>, action: any) {
    console.log("Create User Action!");
    let form = action.payload,
        params = {
          kouser: {
            username: form.username,
            fullName: form.fullName,
            email: form.email,
            role: form.role,
            state: form.state,
            authType: form.authType
          }
        };
    if (form.authType === 'local')
      params.kouser['password'] = form.password;
    else if (form.authType === 'external')
      delete params.kouser['password'];
    return this.apiService.post(this.usersUrl, params).pipe(tap(
      (res: any) => {
        sc.dispatch(new GetAllUsers(form.role));
        this.store.dispatch(new GetUserDetails(form.username));
        this.notify.success('Success', `Created ${form.username}.`);
      }, (err: any) => {
        if (err.status === 401 || err.json().message === 'Invalid Credentials') {
          this.store.dispatch([new Unauthorized(), new Logout()]);
        }
        this.notify.error('Error', err.json().message);
      })
    );
  }

ApiService Post方法:

  post(route: string, payload?: any): Observable<Response> {
    console.log("POST API SERVICE WAS CALLED!!!!!!!!!!!!!!!");
    let headers = new Headers;
    let data = {
      data: payload
    };
    this.setHeaders(headers);
    let reqOptions = new RequestOptions({
      body: data,
      headers: headers,
      url: `${this.url}${route}`
    });
    return this.http.post(this.url, reqOptions.body, reqOptions);
  }

我希望每个呼叫仅发送一次Post,但是它有时会发送两次Post请求。验证后端的服务器有时会收到两个请求。我只在Post上注意到这种情况。

0 个答案:

没有答案