Firebase 云功能:带有 CORS 阻止的总线男孩的 POST 方法

Posted

技术标签:

【中文标题】Firebase 云功能:带有 CORS 阻止的总线男孩的 POST 方法【英文标题】:Firebase cloud functions: POST method with bus boy blocked by CORS 【发布时间】:2019-05-12 01:31:18 【问题描述】:

使用带有 Firebase 云功能的 busboy 具有上传功能我一直收到此错误

访问 XMLHttpRequest 在 'firebase 云功能网址' CORS 策略已阻止来自原点“localhost”的: 请求中不存在“Access-Control-Allow-Origin”标头 资源。

我已经包含了 cors:

app.use(cors());

app.use((req, res, next) => 
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Credentials', 'true');
  res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers,  Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method,   Access-Control-Request-Headers');
  res.setHeader('Cache-Control', 'no-cache');
  next();
);

我不确定是不是因为我还在使用免费版本...因为我的简单 GET api 有效..

我也遇到了这个错误,但我不确定是不是因为 CORS 阻止了图片上传..

TypeError: 无法读取 null 的属性“文件”

这是我的代码:

const fs = require("fs");
const os = require("os");
const path = require("path");
const Busboy = require("busboy");

 const busboy = new Busboy( headers: req.headers );
  let uploadData = null;
  let origFileName;

  busboy.on("file", (fieldname, file, filename, encoding, mimetype) => 
    origFileName = filename
    const filepath = path.join(os.tmpdir(), filename);
    uploadData =  file: filepath, type: mimetype ;
    file.pipe(fs.createWriteStream(filepath));
  );

  busboy.on("finish", () => 
    const bucket = gcs.bucket(bucketName);
    let uuid = UUID();

    bucket
      .upload(uploadData.file, 
        uploadType: "media",
        metadata: 
          metadata: 
            contentType: uploadData.type,
            firebaseStorageDownloadTokens: uuid
          
        ,

当我使用邮递员时没有遇到错误。

任何帮助将不胜感激..

【问题讨论】:

【参考方案1】:

终于找到答案了。从 react 发帖时,内容类型应该是“multipart/form-data”而不是“application/x-www-form-urlencoded”。

【讨论】:

以上是关于Firebase 云功能:带有 CORS 阻止的总线男孩的 POST 方法的主要内容,如果未能解决你的问题,请参考以下文章

Firebase https onCall 功能被 cors 阻止

从 Firebase 托管到 Firebase 功能的请求被 CORS 阻止

在 Firebase Cloud 功能中启用 Cors

为啥一个 Firebase 函数被 CORS 阻止了?

Cors 请求阻止的 Firebase 函数

从被 CORS 阻止的 Firebase 托管代码调用 Firebase 函数