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"
  }
}