Whisky-Toad
Whisky-Toad

Reputation: 125

Is there a way to access my response error message?

Ok So i am trying to display my backend error messages in the front end, so I have it setup to send the response with the error code and a message and then in my action I am setting a state in my React component which I will then use to display the error message, so far I can get to display the error code but that is no use to most users so I would like to access the message I send with the code! So I want it to say user already exists or passwords do not match rather than Error: Request failed with status code 400

my action

export const signup = (form, router, setError) => async (dispatch) => {
  const changeError = (error) => {
    setError(error);
  };

  try {
    const { data } = await api.signup(form);
    dispatch({ type: AUTH, data });
    router.push("/");
  } catch (error) {
    console.log(error);
    changeError(error);
  }
};

my node signup

export const signup = async (req, res) => {
  const { email, password, confirmPassword, firstName, lastName } = req.body;
  try {
    const existingUser = await user.findOne({ email });
    if (existingUser)
      return res.status(400).json({ message: "User already exists." });

    if (password != confirmPassword)
      return res.status(400).json({ message: "Passwords do not match." });

    const hashedPassword = await bcrypt.hash(password, 12);

    const result = await user.create({
      email,
      password: hashedPassword,
      name: `${firstName} ${lastName}`,
    });

    const token = jwt.sign(
      { email: result.email, id: result._id },
      process.env.JWT_KEY,
      {
        expiresIn: "1h",
      }
    );

    res.status(200).json({ result, token });
  } catch (error) {
    res.status(500).json({ message: "Something went wrong." });
  }
};

Upvotes: 0

Views: 1948

Answers (2)

Whisky-Toad
Whisky-Toad

Reputation: 125

as Guy said, slightly before I found the answer myself I set the error to error.response.data.message

so now I can set my error in the front end to display the message

and yea sorry was using axios, I'll know better for next time to mention that!

export const signup = (form, router, setError) => async (dispatch) => {
  const changeError = (error) => {
    setError(error);
  };

  try {
    const { data } = await api.signup(form);
    dispatch({ type: AUTH, data });
    router.push("/");
  } catch (error) {
    console.log(error);
    changeError(error.response.data.message);
  }
};

Upvotes: 0

Guy Cohen
Guy Cohen

Reputation: 194

After little search on Google, if you are using Axios as your api, the path to the error message is:

error.response.data.message

else, have you tried somthing like this?

error.data.message or error.message

Upvotes: 2

Related Questions