I am not able to clearly Identify the bug, data is send in JSON Format still it is showing unusual error
Forgot Password Route
exports.forgotPassword = catchAsyncErrors(async (req, res, next) => {
const user = await User.findOne({ email: req.body.email });
if (!user) {
return next(new ErrorHandler("User not found", 404));
}
// Get ResetPassword Token
const resetToken = user.getResetPasswordToken();
await user.save({ validateBeforeSave: false });
const resetPasswordUrl = `${req.protocol}://${req.get(
"host"
)}/password/reset/${resetToken}`;
const message = `Your password reset token is :- \n\n ${resetPasswordUrl} \n\nIf you have not requested this email then, please ignore it.`;
try {
await sendEmail({
email: JSON.stringify(user.email),
subject: `Ecommerce Password Recovery`,
message
});
res.status(200).json({
success: true,
message: `Email sent to ${user.email} successfully`
});
} catch (error) {
user.resetPasswordToken = undefined;
user.resetPasswordExpire = undefined;
await user.save({ validateBeforeSave: false });
return next(new ErrorHandler(error.message, 500));
}
});
forgotPassword Action.js
export const forgotPassword = (email) => async(dispatch)=>{
try{
dispatch({type: FORGOT_PASSWORD_REQUEST});
const config = {headers : {"Content-Type": "application/json"}};
const {data} = await axios.post(
"/api/v1/password/forgot",
email,
config
);
dispatch({
type: FORGOT_PASSWORD_SUCCESS,
payload : data.message,
})
}catch(error) {
dispatch({
type: FORGOT_PASSWORD_FAIL,
payload: error.response.data.message,
});
}
}
As mentioned in some answers online available I have made few changes but Error is still their,
- In Action.js I have written content type as "application/json".
- in forgotPassword Route while sending email to function, I have used a method JSON.stringify.
CodePudding user response:
Your axios.post
statement sends a request whose body is an email address (i.e., plain text), but the Content-Type: application/json
wrongly claims it to be JSON. That leads to the observed error.
Correct would be
const data = await axios.post(
"/api/v1/password/forgot",
{email},
config
);
(Note the absence of braces around data
.)
CodePudding user response:
the error means you are trying to parse a string that is a non-JSON format.
example:
this will fail
JSON.parse("hello")
this will work
JSON.parse('"hello"')