I am making a user signup API, where name and email are set to be unique. When I send a JSON object which has a the same email address as an existing user, it gives an error as expected. But there is no message in that error, which i can then use to give a more usable message.
Below is the error object that i'm getting.
{ "index": 0,
"code": 11000,
"keyPattern": {
"email": 1
},
"keyValue": {
"email": "[email protected]"
}
}
And this is my controller module,
const User=require("../models/userModels.js");
exports.signUp=(req,res)=>{
const user=new User(req.body);
user.save((err,user)=>{
if(err){
res.send(err)
}
else{
res.json({
user
})
}
})
}
Mongoose's default error object is designed for non limited use cases. So you need to look at it and depending on what it contains add custom messages. For this specific use case of yours, you can for example do it like so:
const User = require("../models/userModels.js");
exports.signUp = async (req, res) => {
try {
const user = new User(req.body);
await user.save();
res.json({
user,
});
} catch (err) {
if (err.code === 11000 && err?.keyPattern.hasOwnProperty("email")) {
err.message = "This email is alrady used.";
} else if (err.code === 11000 && err?.keyPattern.hasOwnProperty("name")) {
err.message = "This name is alrady taken.";
}
res.send(err);
}
};
I'm using async
/await
syntax here to have a better looking code, yours would work as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With