【发布时间】:2020-06-23 02:36:49
【问题描述】:
我有点沮丧,因为我遇到了 CORS 错误,我现在正在处理它大约 4 个小时:
Access to XMLHttpRequest at 'http://localhost:8080/create-post/1' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
---
POST http://localhost:8080/create-post/1 net::ERR_FAILED
我找不到问题的答案。 我在 Angular 中的服务:
Service.ts
...
uploadPicture(file) {
return this.httpClient.post("http://localhost:8080/create-post/1", file)
.pipe(catchError(this.handleError));
}
我的组件
...
onFileChanged(e) {
const file = e.target.files[0];
console.log(file)
this._service.uploadPicture(e.target.files[0]).subscribe((test)=>{
console.log(test)
})
}
我的后台
...
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
next();
});
...
app.post('/create-post/:id', function (req, res) {
res.setHeader('Content-Type', 'image/png');
console.log("test")
fs.writeFile("/tmp/test.jpg", req.body.bild, 'binary', function(err) {
if(err)
console.log(err);
else
console.log("The file was saved!");
return res.send('WORK PLEASE')
});
});
它甚至没有触发 POST 方法中的console.log("test") 行,所以它在到达那里之前就已经失败了。
感谢您的每一个回答!
【问题讨论】:
-
我不确定这是否能解决问题,但您在 CORS 设置中缺少
Accept标头 -
您是否尝试在您的 package.json 文件中设置代理?实际上刚刚发现,您需要在您的角度项目中创建proxy.conf.json。 angular.io/guide/build
-
@WillAlexander 你到底指的是哪个标题?
-
@noobius 不,我没有,你能解释一下它是如何工作的吗?
-
Accept标头。尝试将Accept添加到 CORS 设置中允许的标头列表中。
标签: node.js angular cors backend