所以我是 React 的新手,我创建了一个注册页面。
问题是如果我提供无效输入,那么 MongoDB 会抛出错误。
它似乎在 Login
和 UserProfile
等页面中运行良好,而在 UserRegistration
如果有空白字段,页面将重定向到主页,显示没有错误。 控制台中给出了状态代码,但没有抛出错误。
状态应该更新自身以具有键值对错误,但它更新为
userInfo: 'error message'
减速器:
export const userRegisterReducer = (state = {}, action) => {
switch (action.type) {
case USER_REGISTER_REQUEST:
return { loading: true }
case USER_REGISTER_SUCCESS:
return { loading: false, userInfo: action.payload }
case USER_REGISTER_FAIL:
return { loading: false, error: action.payload }
case USER_LOGOUT:
return {}
default:
return state
}
}
动作创建者:
export const register = (name, email, password) => async (dispatch) => {
try {
dispatch({
type: USER_REGISTER_REQUEST,
})
const config = {
headers: {
'Content-Type': 'application/json',
},
}
const { data } = await axios.post(
'/api/users',
{ name, email, password },
config
)
dispatch({
type: USER_REGISTER_SUCCESS,
payload: data,
})
dispatch({
type: USER_LOGIN_SUCCESS,
payload: data,
})
localStorage.setItem('userInfo', JSON.stringify(data))
} catch (error) {
dispatch({
type: USER_REGISTER_FAIL,
payload:
error.response && error.response.data.message
? error.response.data.message
: error.message,
})
}
}
状态:
userLogin: {
loading: false,
message(pin):"User validation failed: name: Path `name` is required., email: Path `email` is
required., password: Path `password` is required."
stack(pin):"ValidationError: User validation failed: name: Path `name` is required., email: Path `email` is required., password: Path `password` is required. at model.Document.invalidate (C:\Users\Fayaz B\Desktop\Fayaz\Dev\Portfolio\ecommerce\node_modules\mongoose\lib\document.js:2693:32) at C:\Users\Fayaz B\Desktop\Fayaz\Dev\Portfolio\ecommerce\node_modules\mongoose\lib\document.js:2513:17 at C:\Users\Fayaz B\Desktop\Fayaz\Dev\Portfolio\ecommerce\node_modules\mongoose\lib\schematype.js:1241:9 at processTicksAndRejections (internal/process/task_queues.js:75:11)"
}
userRegister: {
loading: false,
message(pin):"User validation failed: name: Path `name` is required., email: Path `email` is
required., password: Path `password` is required."
stack(pin):"ValidationError: User validation failed: name: Path `name` is required., email: Path `email` is required., password: Path `password` is required. at model.Document.invalidate (C:\Users\Fayaz B\Desktop\Fayaz\Dev\Portfolio\ecommerce\node_modules\mongoose\lib\document.js:2693:32) at C:\Users\Fayaz B\Desktop\Fayaz\Dev\Portfolio\ecommerce\node_modules\mongoose\lib\document.js:2513:17 at C:\Users\Fayaz B\Desktop\Fayaz\Dev\Portfolio\ecommerce\node_modules\mongoose\lib\schematype.js:1241:9 at processTicksAndRejections (internal/process/task_queues.js:75:11)"
}
MongoDB 注册控制器:
const registerUser = asyncHandler(async (req, res) => {
const { name, email, password } = req.body
const userExists = await User.findOne({ email })
if (userExists) {
res.status(400)
throw new Error('User already exists')
}
const user = await User.create({
name,
email,
password,
})
if (user) {
res.status(201).json({
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
token: generateToken(user._id),
})
} else {
res.status(400)
throw new Error('Invalid user data')
}
})