REST API开发中req.body为undefined问题求解,技术栈Nuxt.js+Express.js
问题修复方案
根因定位
你遇到的链路中req.body为undefined的核心原因是Express服务未配置JSON请求体解析中间件,默认情况下Express不会自动解析POST请求携带的JSON格式 payload,未配置中间件时req.body默认返回undefined。
分步修复操作
1. 修复前端转发层(路径:project_front/server/routes/index.js)
在路由注册前新增JSON解析中间件,同时补充请求头配置和异常响应返回,修改后代码如下:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' const { Router } = require('express') const express = require('express') const axios = require('axios') const dotenv = require('dotenv') dotenv.config() const api = axios.create({ baseURL: "http://localhost:3001/", }) const router = Router() // 新增:解析application/json格式的请求体 router.use(express.json()) router.post(`/p-t`, async (req, res) => { try { // 可放开下方注释验证当前层是否正常拿到请求数据 // console.log('转发层收到数据:', req.body) const { data } = await api.post(`/post-tip`, req.body, { // 显式指定请求头,避免axios自动识别异常 headers: { 'Content-Type': 'application/json' } }) res.json(data) } catch (e) { console.log('转发异常:', e) // 补充异常响应,避免前端请求超时 res.status(500).json({ error: '接口转发失败' }) } }) module.exports = router
2. 修复后端API层(路径:prodect_api/ 下的服务入口文件,通常为app.js/index.js)
找到后端Express实例初始化的位置,新增JSON解析中间件配置:
const express = require('express') const app = express() // 新增:全局配置JSON请求体解析 app.use(express.json()) // 原有路由注册逻辑保持不变 const routes = require('./src/routes/index') app.use(routes) // 原有服务启动逻辑保持不变 app.listen(3001, () => { console.log('后端API服务运行在3001端口') })
可选优化项
你可以将project_front/api/index.js中的POST请求路径调整为绝对路径,避免路径拼接异常:
// 原代码:await api.post(`p-t`, payload) // 修改为: const { data } = await api.post(`/p-t`, payload)
内容的提问来源于stack exchange,提问作者dokichan
相关产品推荐
相关产品推荐

