gpt4 book ai didi

firebase - 在 Cloud Functions 中使用 Express 处理多部分/表单数据 POST

转载 作者:行者123 更新时间:2023-12-04 09:57:46 25 4
gpt4 key购买 nike

我一直在尝试使用 Firebase 函数和 Express 处理 POST(多部分/表单数据),但它不起作用。在本地服务器上试过这个,它工作得很好。除了不包含在 Firebase 函数中之外,一切都相同。

除了搞砸了请求对象,它似乎也搞砸了 busboy 的工作方式。

我尝试了不同的解决方案 here但他们就是不工作。正如一位用户所提到的,传递给 busboy 的回调(在找到“字段”或完成数据处理时调用)永远不会被调用,函数只是挂起。

有任何想法吗?

这是我的函数代码以供引用:

const functions = require('firebase-functions');
const express = require('express');
const getRawBody = require('raw-body');
const contentType = require('content-type')
const Busboy = require('busboy');

const app = express();

const logging = (req, res, next) => {
console.log(`> request body: ${req.body}`);
next();
}

const toRawBody = (req, res, next) => {
const options = {
length: req.headers['content-length'],
limit: '1mb',
encoding: contentType.parse(req).parameters.charset
};
getRawBody(req, options)
.then(rawBody => {
req.rawBody = rawBody
next();
})
.catch(error => {
return next(error);
});
};

const handlePostWithBusboy = (req, res) => {
const busboy = new Busboy({ headers: req.headers });
const formData = {};

busboy.on('field', (fieldname, value) => {
formData[fieldname] = value;
});

busboy.on('finish', () => {
console.log(`> form data: ${JSON.stringify(formData)}`);
res.status(200).send(formData);
});

busboy.end(req.rawBody);
}

app.post('/', logging, toRawBody, handlePostWithBusboy);

const exchange = functions.https.onRequest((req, res) => {
if (!req.path) {
req.url = `/${req.url}`
}
return app(req, res)
})
module.exports = {
exchange
}

最佳答案

请阅读 documentation for handling multipart form uploads .

... if you want your Cloud Function to process multipart/form-data, you can use the rawBody property of the request.



因为方式云函数 pre-processes some requests ,您可以预期某些 Express 中间件将无法工作,而这正是您遇到的问题。

关于firebase - 在 Cloud Functions 中使用 Express 处理多部分/表单数据 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com