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
相关产品推荐
相关产品推荐

