[Express.js + Node.js] POST请求req.body获取不正确的问题

本文详细介绍了在 Node.js 开发中遇到的 POST 请求 req.body 为 undefined 或 empty 的问题,以及如何通过引入并配置 body-parser 中间件来正确解析 JSON 数据。确保请求体的数据能够正确存入 req.body,并提供了安装 body-parser 的步骤和示例代码,帮助开发者解决实际开发中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到的问题:req.body为undefined或者为empty

修改过程:

  1. 传入的数据格式要是json
  2. 用POST方法
  3. app.js中使用:
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

记得加入body-parser库,方法:

npm install body-parser --save

接收传来的数据:

app.post('/add', function(req, res) {
  console.log(req.body); // 数据都存在req.body里
  // 访问req.body:req.body.name, req.body.age, ...
  res.send("..."); // 回传数据
});
### 使用 React、Node.jsExpress、Axios 和 MySQL 构建应用程序 #### 创建项目结构 为了构建一个完整的全栈 Web 应用程序,需要创建前后端分离的文件夹结构。前端部分可以使用 Create React App 初始化,而后端则基于 Node.jsExpress。 ```bash my-app/ ├── backend/ # 后端代码目录 │ ├── config # 数据库配置等 │ ├── controllers # 控制器逻辑 │ ├── models # ORM模型定义 │ └── routes # API路由定义 └── frontend/ # 前端代码目录 └── public # 静态资源 ``` #### 安装依赖包 对于后端,在 `backend` 文件夹下安装必要的 npm 包: ```bash npm init -y npm install express mysql2 bcryptjs jsonwebtoken cors dotenv body-parser ``` 对于前端,则是在 `frontend` 中执行如下命令初始化并安装所需工具: ```bash npx create-react-app . npm install axios react-router-dom ``` #### 设计 RESTful API 接口 在 `backend/routes/api/users.js` 中设置用户注册和登录的相关API: ```javascript const router = require('express').Router(); // 用户注册... router.post('/register', ...); // 用户登录... router.post('/login', async (req, res) => { // 登录验证逻辑... const token = jwt.sign({ id }, process.env.JWT_SECRET_KEY, { expiresIn: "1h" }); return res.status(200).json({ success: true, message: 'User logged in successfully', data: {token} }); }); module.exports = router; ``` #### 实现前端交互功能 在 `frontend/src/components/LoginForm.jsx` 组件里实现表单提交处理方法: ```jsx import React, { useState } from 'react'; import axios from 'axios'; function LoginForm() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const handleSubmit = async e => { e.preventDefault(); try { const response = await axios.post( `${process.env.REACT_APP_API_URL}/api/auth/login`, { username, password } ); localStorage.setItem('jwtToken', response.data.token); alert('Login successful!'); } catch (err) { console.log(err.response?.data || err.message); } }; return ( <form onSubmit={handleSubmit}> {/* 表单项 */} </form> ); } export default LoginForm; ``` #### 连接数据库操作 在 `backend/config/db.config.js` 下完成与 MySQL 数据库之间的连接配置工作: ```javascript require('dotenv').config(); const mysql = require('mysql2'); const connection = mysql.createConnection({ host : process.env.DB_HOST, user : process.env.DB_USER, password : process.env.DB_PASSWORD, database : process.env.DB_NAME }); connection.connect((err) => { if (err){ throw err; } console.log("Connected to the MySQL server."); }); module.exports = connection; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值