【问题标题】:CORS is blocking me to send images/files to my backendCORS 阻止我将图像/文件发送到我的后端
【发布时间】: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


【解决方案1】:

比你手动设置。你最好使用cors 库。

用法:

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors()) //Add CORS middleware

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')
  });
});

【讨论】:

  • 没关系,我有一个错字,你的回答非常好!非常感谢!
猜你喜欢
  • 2019-07-07
  • 2017-08-20
  • 1970-01-01
  • 2018-12-30
  • 2021-12-15
  • 2019-09-04
  • 2020-05-17
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多