使用 Angular 2 向 API 发出 POST 请求时出错

Posted

技术标签:

【中文标题】使用 Angular 2 向 API 发出 POST 请求时出错【英文标题】:Error making POST request to an API with Angular 2 【发布时间】:2017-10-11 00:13:26 【问题描述】:

我正在尝试在我的 Angular 2 应用程序中发出发布请求。我收到一个错误。我启用了 CORS 插件,当我使用 Postman 时,请求成功,所以不知道可能出了什么问题。我会很感激任何帮助:)

Failed to load resource: the server responded with a status of 404 (Not Found)
16:1 XMLHttpRequest cannot load https://website/api/v1/auth/sign_in. Response for preflight has invalid HTTP status code 404

服务.ts

import  Injectable  from "@angular/core";
import  Http, Headers, Response  from "@angular/http";
import 'rxjs/Rx';
import  Observable  from "rxjs";
import User from "./auth.model";

@Injectable()
export class AuthService
    constructor(private http: Http)
    

    signUp(user:User)
        const body= JSON.stringify(user);
        const headers= new Headers ('Content-type':'application/json');
        return this.http.post('https://website/api/v1/auth', body,headers:headers)
            .map((response:Response)=> response.json())
            .catch((error: Response)=>Observable.throw(error.json()));
    

    signIn(user:User)
        const body= JSON.stringify(user);
        const headers= new Headers ('Content-type':'application/json');
        return this.http.post('https://website/api/v1/auth/sign_in', body,headers:headers)
            .map((response:Response)=>response.json())
            .catch((error: Response)=>Observable.throw(error.json()));
    



signin.ts

import  Component, OnInit  from '@angular/core';
import FormGroup, FormControl, Validators,FormsModule from '@angular/forms';
import AuthService from './auth.service';
import User from "./auth.model";

@Component(
  selector: 'app-signin',
  templateUrl: './signin.component.html',
  styleUrls: ['./signin.component.css']
)
export class SigninComponent implements OnInit 
  myForm: FormGroup;

  constructor(private authService: AuthService)  


  onSubmit()
    const user= new User(this.myForm.value.email, this.myForm.value.password);
    this.authService.signIn(user).subscribe();
    console.log("c");
  

  ngOnInit() 
    this.myForm= new FormGroup(
      email: new FormControl(null, [Validators.required,
        Validators.pattern("[a-z0-9!#$%&'*+/=?^_`|~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`|~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
      ]),
      password: new FormControl(null, [Validators.required])
    );
  


【问题讨论】:

【参考方案1】:

我相信传递给http.post 方法的第三个参数是RequestOptions object

   const headers= new Headers ('Content-type':'application/json');
   const options = new RequestOptions( headers );
   this.http.post('https://website/api/v1/auth', user, options)

此外,您不需要在发送对象之前对其进行字符串化,只需将用户对象作为正文发送

您还应该检查以确保服务器在标头中返回 Access-Control-Allow-Origin

【讨论】:

signIn(user:User) const headers= new Headers ('Content-type':'application/json'); const options = new RequestOptions( headers ); return this.http.post('website/api/v1/auth/sign_in', user,options) .map((response:Response)=>response.json()) .catch((error: Response)=>Observable.throw(error.json ())); 您还应该检查以确保服务器正在返回标头中的 Access-Control-Allow-Origin 其实你也可以尝试使用 'text/plain' 而只是使用字符串来查看是否有效 我在浏览器中启用了 CORS 插件,因此没有它也可以工作。我检查了一个获取请求。当我使用 text/plain 时,它给了我 401 未经授权。当我在邮递员中使用 text/plain 时也是如此。 (使用应用程序 json 它可以在邮递员中使用相同的数据).hmm 有趣 你试过application/x-www-form-urlencoded; charset=UTF-8 并序列化对象

以上是关于使用 Angular 2 向 API 发出 POST 请求时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Angular 向 facebook oauth 发出 CORS 问题

角度不会向节点js rest API发出发布请求

如何从Angular向同一域上的Laravel API发送请求?

如何使用 Angular 取消 .Net Core Web API 请求?

我无法向自己的 Spring 引导服务器发出 Angular Http 请求

Angular - 从父组件向动态子组件发出事件