You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Express+Firestore+Cloud Functions+TS构建REST API POST读不到body

问题解决方法

核心问题原因

你遇到的POST接口无法读取请求body、title等字段为undefined的问题,是因为Express 默认没有开启JSON请求体解析能力,无法解析你POST请求里的JSON格式参数。

具体修复步骤

步骤1:添加Express JSON解析中间件

修改你的index.ts文件,在初始化express实例后、注册路由前,添加解析中间件:

// index.ts 修正后代码
import * as functions from 'firebase-functions'
import * as express from 'express'

import { addEntry, getAllEntries } from './entryController'

const api = express()

// 新增以下这行,开启JSON请求体解析
api.use(express.json())

api.get('/', (req, res) => res.status(200).send('Hey there!'))
api.post('/entries', addEntry)
api.get('/entries', getAllEntries)

exports.api = functions.https.onRequest(api)

步骤2:修复异步操作漏await的问题

你当前代码里entry.set(entryObject)是异步IO操作,没有加await会导致接口返回响应时,数据可能还没写入Firestore,极端情况下会出现数据丢失,修改entryController.ts里的addEntry方法:

const addEntry = async (req: Request, res: Response) => {
  const { title, text } = req.body

  try {
    const entry = db.collection('entries').doc()
    const entryObject = {
      id: entry.id,
      title,
      text
    }
    // 新增await关键字
    await entry.set(entryObject)

    res.status(200).send({
      status: 'success',
      message: 'entry added successfully',
      data: entryObject
    })
  } catch(error) {
      res.status(500).json(error.message)
  }
}

步骤3:确认Postman请求配置正确

发送请求时需要满足两个条件:

  • 请求头Content-Type设置为application/json
  • Body选择raw格式,类型选择JSON,参数按JSON格式填写,示例:
{
  "title": "测试标题",
  "text": "测试内容",
  "coverImageUrl": "https://xxx.com/xxx.jpg"
}

修改完成后重新部署Cloud Functions即可正常拿到请求体参数,完成新增数据操作。

内容的提问来源于stack exchange,提问作者David Griffin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:27:04