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

已定义Schema和Model仍出现Username undefined错误求助

用户注册时Username undefined问题排查

问题根源

  1. Express中间件顺序错误
    服务器代码中,路由注册(server.use("/api/user", userRoute))被放在了请求体解析中间件(express.json()、express.urlencoded)之前。这会导致请求到达路由时,Express还未解析JSON格式的请求体,req.body处于undefined状态,自然无法读取req.body.username。

  2. Controller未完成核心逻辑
    registerUser函数仅创建了User实例,但没有执行数据库保存操作,也未向客户端返回任何响应,会导致请求长期挂起。

修复方案

1. 调整中间件顺序

修改服务器代码,将请求体解析中间件放在路由注册之前:

const express = require("express");
const mongoose = require("mongoose");

const { MONGODB } = require("./config");
const userRoute = require("./routes/userRouter");

const PORT = process.env.PORT || 4000;

mongoose
  .connect(MONGODB, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log("Database connected"))
  .catch((err) => {
    console.log(err);
  });

const server = express();

// 优先注册请求体解析中间件
server.use(express.urlencoded({ extended: true }));
server.use(express.json());

// 注册路由
server.use("/api/user", userRoute);

// 错误处理中间件放在最后
server.use((err, req, res, next) => {
  console.error(err);
  res.status(err.statusCode || 500).json({ message: err.message });
});

server.listen(PORT, () => console.log(`Server is listening on ${PORT}`));

2. 完善Controller逻辑

补充用户保存与响应代码,处理成功和异常情况:

const User = require("../models/user");

const registerUser = async (req, res, next) => {
  try {
    const user = new User({
      username: req.body.username,
      employeeId: req.body.employeeId,
      accessLevel: req.body.accessLevel,
      role: req.body.role,
      company: req.body.company,
      password: req.body.password,
      email: req.body.email,
      createdAt: new Date(),
    });

    const savedUser = await user.save();
    res.status(201).json({ message: "用户注册成功", user: savedUser });
  } catch (err) {
    next(err);
  }
};

module.exports = {
  registerUser
};

额外优化建议

  • 禁止明文存储密码,使用bcrypt等库对密码进行哈希处理后再存入数据库。
  • 给Schema字段添加必填验证,例如username: { type: String, required: true },提前拦截非法请求。

内容的提问来源于stack exchange,提问作者KwanYee Tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:50:23