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

Express+Sequelize+MySQL登录注册Postman请求报错排查

问题分析与解决

错误根源

你遇到的Cannot read properties of undefined (reading 'username')错误,核心问题出在userRepository.js的createUser函数:
该函数错误地将req和res作为参数,但在userService调用它时,传入的是一个包含用户数据的普通对象(不是Express的请求响应对象)。这导致函数内尝试访问req.body时,req实际是传入的用户数据对象,根本没有body属性,因此req.body为undefined,进而读取req.body.username时抛出错误。

修正方案

修改userRepository.js中的createUser函数,将参数改为接收用户数据对象,而不是req/res:

const { Op } = require('sequelize');
const { user, Sequelize } = require('../models');

// 修改参数为userData,直接使用传入的数据
const createUser = async (userData) => {
    const User = await user.create({
      username: userData.username,
      email: userData.email,
      password: userData.password,
      role: userData.role,
    });
  
    return User;
  };
  
  const getUserByUsername = async (username) => {
    return user.findOne({ where: {username} });
  };
  
  const getUserByEmail = async (email) => {
    return user.findOne({ where: {email} });
  };
  
  module.exports = {
    createUser,
    getUserByUsername,
    getUserByEmail,
  };

额外检查项

如果修改后仍有问题,请确认你的Express项目是否配置了解析请求体的中间件,否则req.body本身会是undefined:
在你的Express入口文件(比如app.js/server.js)中添加:

const express = require('express');
const app = express();

// 解析JSON格式的请求体
app.use(express.json());
// 如果需要解析urlencoded格式的请求体,也加上
app.use(express.urlencoded({ extended: true }));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:05:28