Firebase function error - UnsupportedMediaTypeError: unsupported content encoding "utf-8"
Firebase function error - UnsupportedMediaTypeError: unsupported content encoding "utf-8"
我正在尝试从 API 调用中捕获数据并不断收到此错误
UnsupportedMediaTypeError: unsupported content encoding "utf-8"
这是我的 firebase 函数 (nodeJs)
const functions = require("firebase-functions");
const admin = require("firebase-admin");
exports.input = functions.https.onRequest((req, res) => {
console.log(req.body);
res.status(200).send('Success');
});
你的错误在这里:res.status(200).send('Success');
您需要传递 json 数据,例如:
res.status(200).send({success: true, data: { key: "value"}});
这就是我解决问题的方法。
在 firebase 函数中无法做到这一点,因为必须在调用 body 解析器中间件之前删除 header(这是一种解决方法)。所以我不得不为此使用 Cloud 运行。我创建了一个 docker 这样的图像。
Docker 文件
FROM node:16-alpine
WORKDIR /usr/src/app
COPY package.json package*.json ./
RUN npm install --only=production
COPY . .
CMD [ "npm", "start" ]
索引
const express = require('express');
const Firestore = require('@google-cloud/firestore')
const db = new Firestore();
const app = express();
app.use(function (req, res, next) {
// remove invalid header
delete req.headers['content-encoding'];
next();
});
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`SMS in API listening on port ${port}`);
});
app.post('/', async (req, res) => {
console.log("SMS IN " + req.body.phone_number + " - " + req.body.message);
await db.collection('sms-in').doc().set({
phone_number: req.body.phone_number,
shortcode: req.body.shortcode,
message: req.body.message,
});
res.json('Success');
});
app.get('/', async (req, res) => {
res.json('I have nothing to give you.');
})
package.json
{
"name": "smsin",
"version": "1.0.0",
"description": "Description here",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "Author name here",
"license": "ISC",
"dependencies": {
"@google-cloud/firestore": "^5.0.1",
"express": "^4.17.1"
}
}
我正在尝试从 API 调用中捕获数据并不断收到此错误
UnsupportedMediaTypeError: unsupported content encoding "utf-8"
这是我的 firebase 函数 (nodeJs)
const functions = require("firebase-functions");
const admin = require("firebase-admin");
exports.input = functions.https.onRequest((req, res) => {
console.log(req.body);
res.status(200).send('Success');
});
你的错误在这里:res.status(200).send('Success');
您需要传递 json 数据,例如:
res.status(200).send({success: true, data: { key: "value"}});
这就是我解决问题的方法。
在 firebase 函数中无法做到这一点,因为必须在调用 body 解析器中间件之前删除 header(这是一种解决方法)。所以我不得不为此使用 Cloud 运行。我创建了一个 docker 这样的图像。
Docker 文件
FROM node:16-alpine
WORKDIR /usr/src/app
COPY package.json package*.json ./
RUN npm install --only=production
COPY . .
CMD [ "npm", "start" ]
索引
const express = require('express');
const Firestore = require('@google-cloud/firestore')
const db = new Firestore();
const app = express();
app.use(function (req, res, next) {
// remove invalid header
delete req.headers['content-encoding'];
next();
});
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log(`SMS in API listening on port ${port}`);
});
app.post('/', async (req, res) => {
console.log("SMS IN " + req.body.phone_number + " - " + req.body.message);
await db.collection('sms-in').doc().set({
phone_number: req.body.phone_number,
shortcode: req.body.shortcode,
message: req.body.message,
});
res.json('Success');
});
app.get('/', async (req, res) => {
res.json('I have nothing to give you.');
})
package.json
{
"name": "smsin",
"version": "1.0.0",
"description": "Description here",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "Author name here",
"license": "ISC",
"dependencies": {
"@google-cloud/firestore": "^5.0.1",
"express": "^4.17.1"
}
}