在Node.js生态中,Express是最常用的Web框架之一,开发接口时经常需要接收前端发送的POST请求数据,再把这些数据传递到其他业务函数中完成校验、存储、计算等操作。要完成这个流程,需要先做好Express的中间件配置,再按照规范获取数据并传递。

一、基础环境准备
首先需要初始化项目并安装Express依赖,执行以下命令完成基础环境搭建:
# 初始化项目 npm init -y # 安装Express npm install express
安装完成后,创建入口文件app.js,先搭建基础的Express服务:
const express = require('express')
const app = express()
const port = 3000
// 后续在这里添加中间件和路由
app.listen(port, () => {
console.log(`服务运行在 http://127.0.0.1:${port}`)
})
二、配置POST请求数据解析中间件
Express默认不会解析请求体中的数据,需要根据POST请求的数据格式配置对应的中间件,才能正确获取到数据。
1. 处理JSON格式POST数据
如果前端发送的是Content-Type为application/json的POST请求,需要使用express.json()中间件:
// 解析JSON格式的请求体,数据会挂载到req.body上 app.use(express.json())
2. 处理表单格式POST数据
如果前端发送的是普通表单提交(Content-Type为application/x-www-form-urlencoded),需要使用express.urlencoded()中间件:
// 解析表单格式的请求体,extended为true表示支持嵌套对象解析
app.use(express.urlencoded({ extended: true }))
三、定义处理数据的业务函数
先定义一个独立的业务函数,用来接收POST请求获取到的数据并处理,比如实现一个用户注册数据的校验和存储逻辑:
/**
* 处理用户注册数据的业务函数
* @param {Object} userData 从POST请求中获取的用户数据
* @returns {Object} 处理结果
*/
function handleRegisterData(userData) {
// 简单校验数据
if (!userData.username || !userData.password) {
return {
success: false,
message: '用户名和密码不能为空'
}
}
// 这里可以添加数据存储、密码加密等逻辑
console.log('接收到的用户数据:', userData)
return {
success: true,
message: '数据处理完成',
data: userData
}
}
四、在POST路由中调用业务函数
定义POST路由,从请求中获取数据后传递给上面定义的业务函数:
// 定义用户注册的POST接口
app.post('/api/register', (req, res) => {
// 从req.body中获取POST请求的数据
const postData = req.body
// 把数据传递给业务函数处理
const result = handleRegisterData(postData)
// 返回处理结果给前端
res.json(result)
})
完整的app.js文件内容如下:
const express = require('express')
const app = express()
const port = 3000
// 配置请求体解析中间件
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
/**
* 处理用户注册数据的业务函数
* @param {Object} userData 从POST请求中获取的用户数据
* @returns {Object} 处理结果
*/
function handleRegisterData(userData) {
if (!userData.username || !userData.password) {
return {
success: false,
message: '用户名和密码不能为空'
}
}
console.log('接收到的用户数据:', userData)
return {
success: true,
message: '数据处理完成',
data: userData
}
}
// 定义POST接口
app.post('/api/register', (req, res) => {
const postData = req.body
const result = handleRegisterData(postData)
res.json(result)
})
app.listen(port, () => {
console.log(`服务运行在 http://127.0.0.1:${port}`)
})
五、测试验证
可以使用Postman或者curl命令发送POST请求测试接口:
# 发送JSON格式的POST请求
curl -X POST http://127.0.0.1:3000/api/register
-H "Content-Type: application/json"
-d '{"username":"test","password":"123456"}'
如果配置正确,会收到如下返回结果:
{
"success": true,
"message": "数据处理完成",
"data": {
"username": "test",
"password": "123456"
}
}
六、常见注意事项
- 如果没有配置对应的请求体解析中间件,req.body会是undefined,无法获取到POST数据
- 如果POST请求发送的是FormData格式数据(比如文件上传场景),需要使用multer等第三方中间件处理,不能直接用内置中间件解析
- 业务函数的参数可以根据需求扩展,比如同时传递请求对象、响应对象,但是尽量保持函数的单一职责,只处理和数据相关的逻辑
- 传递数据给业务函数时,最好先做基础的空值判断,避免业务函数处理时出现报错