【问题标题】:I'm not able to make a post request using FormGroup Angular 6我无法使用 FormGroup Angular 6 发出发布请求
【发布时间】:2019-10-31 10:57:49
【问题描述】:

我是 Angular 新手,我无法使用 formGroup 发出帖子请求。正在为我拥有的所有字段发送正文,但是由于以下错误,出现错误 400(错误请求): {"status":"error","errors":{"message":"A second操作在前一个操作完成之前在此上下文上开始。这通常是由使用相同 DbContext 实例的不同线程引起的,但不能保证实例成员是线程安全的。这也可能是由在客户端上评估嵌套查询引起的,如果是这种情况,请重写查询以避免嵌套调用。"}},我有点理解错误是什么,但我不明白我的代码有什么问题。提前致谢

register.model.ts

export class User{
    FirstName: string;
    LastName: string;
    UserName: string;
    Email: string;
    Password: string;
}

register.service.ts

RegisterUser(user: User){
return this.http.post('url', user);

}

register.component.html

<form [formGroup]="registerForm" (ngSubmit)="onSubmit()">

  <div class="form-group row">
    <label class="col-sm-3 col-form-label">First Name:</label>
    <div class="col-sm-3">
      <input type="text" formControlName="FirstName" class="form-control"
        placeholder="First Name" ngModel>
    </div>
  </div>
  <div class="form-group row">
    <label class="col-sm-3 col-form-label">Last Name:</label>
    <div class="col-sm-3">
      <input type="text" formControlName="LastName" class="form-control"
        id="LastName" placeholder="LastName" ngModel>
    </div>
  </div>
  <div class="form-group row">
    <label for="UserName" class="col-sm-3 col-form-label">Username:</label>
    <div class="col-sm-3">
      <input type="text" formControlName="UserName" class="form-control"
        placeholder="User Name" ngModel>
    </div>
  </div>
  <div class="form-group row">
    <label for="Email" class="col-sm-3 col-form-label">Email:</label>
    <div class="col-sm-3">
      <input type="email" formControlName="Email" class="form-control"
        placeholder="example@example.com" ngModel>
    </div>
  </div>

  <div class="form-group row">
    <label for="password" class="col-sm-3 col-form-label">Password:</label>
    <div class="col-sm-3">
      <input type="password" formControlName="Password"  class="form-control"
        placeholder="*********" ngModel>
    </div>
  </div>

  <br>

  <p class="text-center">Already have an account? <span>
      <button (click)="goToSignIn();" class="unstyled-button">Sign In.</button>
    </span></p>

  <button type="submit" class="button button4">Sign Up</button>
</form>

register.component.ts

export class RegisterComponent implements OnInit {

user: User;
registerForm: FormGroup;

constructor(private router: Router, private userService: RegisterService, private toastr: 
          ToastrService, private fb: FormBuilder) { }

ngOnInit() {
  this.registerForm = this.fb.group({
    FirstName: ['', Validators.required],
    LastName: ['', Validators.required],
    UserName: ['', Validators.required],
    Email: ['', Validators.required],
    Password: ['', Validators.required],
  })
}


onSubmit(){
  return this.userService.RegisterUser(this.registerForm.value).subscribe((data:any) => {
    this.toastr.success('User Registered Successfully');
  }, error => {
    this.toastr.error('Registeration Failed');
  })
}

}

【问题讨论】:

    标签: javascript html angular forms typescript


    【解决方案1】:

    这不是您遇到问题的 javascript 错误。这是来自实体框架的错误。

    您的 DBContext 正被两个线程同时使用。可能是同一请求中的两个线程使用它。

    检查您的 DBContext 是否由于某种原因未声明为静态。

    您需要分享您的 api 代码,以便我们调试您的问题。

    【讨论】:

    • 感谢您的回复,实际上它以前在我不使用 formGroup 时可以工作,除了我刚刚删除了 ngModel 并使用了 formGroup 之外,我没有更改代码中的任何内容
    • 您是否将控制台中的有效负载与这两种方法进行了比较?我的猜测是您发送了不同的数据,这些数据会影响后端代码的执行。既然我们两者都没有,那我们就不能为你做。如果您发布有效载荷,那么我们可以假设原因
    • 我确定api的payload没有问题的原因是,当我从控制台获取数据并粘贴到Postman时,一切正常
    • 将您的代码恢复为 ngModel 并再次并排检查您发送的内容。不仅有效载荷,还有标头。我的想法是某些过滤器或数据未正确发送,因此您的后端出现问题。然后,您正在使用相同的数据库上下文在数据库中编写某些内容(可能是错误)并失败。如果我是你,我会在我的 api 代码中添加一个断点并检查那里发生了什么。
    • 好的,这个已经解决了,我按照你说的做了,发现问题是我登录的时候注册不了用户,所以只好清除会话能够注册一个新用户
    【解决方案2】:

    试试这样:

    registerUser(user) : Observable<any> {
    return this.http.post<any>('url', JSON.stringify(user), this.httpOptions).pipe(
        tap((user) => console.log(`user sent : ${JSON.stringify(user)}`)),
        catchError(this.handleError)
      );
    

    };

    httpOptions 是这样的:

    httpOptions = {
    headers: new HttpHeaders({
    'Content-Type': 'application/json'
    })
    

    };

    捕获错误:

    handleError(error) {
    let errorMessage = '';
    if(error.error instanceof ErrorEvent) {
    // Get client-side error
    errorMessage = error.error.message;
    } else {
    // Get server-side error
    errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
    }
    window.alert(errorMessage);
    return throwError(errorMessage);
    }
    

    【讨论】:

    • 感谢您的回复,实际上我仍然遇到同样的错误,顺便说一句,当我不使用 formGroup 时它正在工作,我使用的是 ngModel,但是,当我尝试使用formGroup 出现了这个错误
    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 2019-10-22
    • 1970-01-01
    • 2016-12-18
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多