【发布时间】:2018-03-14 17:12:19
【问题描述】:
我知道已经有一些关于该主题的问题,但我似乎无法找到解决问题的方法。
我是 Angular 4 的新手,我正在尝试使用外部自定义 API 构建一个简单的创建/更新/删除服务。
我首先遇到了 CORS 的问题,但是通过在 api 的服务器端设置“Access-Control-Allow-Origin”标头来解决这个问题。
现在我的 GET/PATCH 和 DELETE 请求工作正常,但我的“POST”仍然出现错误。
这是“奇怪”的部分。
当我查看谷歌浏览器开发工具的“网络”选项卡时,我看到“OPTIONS”和“POST”请求(正如 Angular 应该做的那样),但只有“OPTIONS”具有“访问控制” -Allow-Origin:http://localhost:3003" 在响应头中。
但是,它们都发送“200”响应代码。 (这里是some screenshots)
为什么在其他人工作正常的情况下帖子会中断?
以下是我的服务中的一些代码示例:
private headers = new Headers({'Content-Type': 'application/json'});
// works
update(id: number, fields: any): Promise<Tag> {
const url = `${this.tagsUrl}/${id}`;
return this.http
.patch(url, JSON.stringify(fields), {headers: this.headers})
.toPromise()
.then(res => res.json())
.catch(this.handleError);
}
// doesn't work
create(tagName: string, tagType: number): Promise<any> {
return this.http
.post(this.tagsUrl, JSON.stringify({name: tagName, tagType: tagType}), {headers: this.headers})
.toPromise()
.then(res => res.json())
.catch(this.handleError);
}
提前感谢您提供的任何帮助!
迈克尔
【问题讨论】:
-
这不是 Angular 相关的问题。是后端做错了。我建议在与后端相同的主机上运行 Angular。所以它跳过 preflight 它可能会变得很痛苦。
-
我明白了。我会尝试与后端负责人一起寻找解决方案。但是为什么问题只出现在“发布”而不是任何其他方法?
-
那么后台不允许发帖。我不确定 preflight 是否仅附带 POST,但只需 google 一下,您就会找到答案。
标签: javascript angular api cors