Redux 状态无法在错误情况下更新

时间:2021-03-29 17:33:04

标签: javascript reactjs mongodb redux

所以我是 React 的新手,我创建了一个注册页面。

问题是如果我提供无效输入,那么 MongoDB 会抛出错误。 它似乎在 LoginUserProfile 等页面中运行良好,而在 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')
  }
})

0 个答案:

没有答案