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

Express创建用户POST请求提示username值为undefined如何解决

问题原因

1. 中间件注册顺序错误(核心问题)

express-validator 依赖body-parser解析后的请求体参数,你现在把app.use(expressValidator())写在了body-parser的注册逻辑之前,此时请求体还没有被解析,req.body是空对象,所以校验的时候拿不到username、password等参数,才会返回value: undefined的错误。

2. 校验规则笔误(次要问题)

createUserForm回调函数中,password2的校验提示和逻辑不匹配,当前写的是req.checkBody('password2', 'UserName is required').equals(req.body.password);,提示文案不符合校验逻辑,属于可修复的笔误。


解决方案

第一步:调整中间件顺序

修改app.js中的代码,把express-validator的注册逻辑移到body-parser之后,调整后代码如下:

const express = require('express');
const dotenv = require('dotenv');
const app = express(); //main app variable that represents the application
const morgan = require('morgan');
const bodyparser = require("body-parser"); //requiring the body parser         
const path = require('path');
const expressValidator = require('express-validator');
const bycrypt = require('bcryptjs');
          
//require the monogo db file
const connectDB = require('./server/database/connection');
dotenv.config({ path: 'config.env' });
//for the port variable
const PORT = process.env.PORT || 8080;
//requiring morgan file 
//to log the request 
app.use(morgan('tiny'));
// mongo db connection 
connectDB();
//to show >> req.body
app.use(bodyparser.json());
app.use(bodyparser.urlencoded({ extended: true }));

// 把expressValidator注册移到body-parser之后
app.use(expressValidator())

第二步:修正校验规则笔误

修改createUserForm函数中password2的校验规则:

// 修改前
// req.checkBody('password2', 'UserName is required').equals(req.body.password);
// 修改后
req.checkBody('password2', '确认密码与密码输入不一致').equals(req.body.password);

第三步(可选验证)

如果调整完还是报错,可以在createUserForm函数最开头加一行console.log(req.body),看控制台打印的请求体是否包含username等表单提交的参数,确认参数传递链路正常。

内容的提问来源于stack exchange,提问作者Hesham Eldawy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:03