Instructor: Let's now handle the error
that occurs when we try to create duplicate fields
for fields that are actually supposed to be unique.
And so, remember,
that this is the type of error
that we get.
So, we tried to create a new tour
with a name that already exists
and the name fields is supposed to be unique
and so we get this error.
Now this error here doesn't have
a name property, okay?
And that's because, as I mentioned before,
it is actually not an error
that is caused by a Mongoose.
But instead, really, by the underlying
MongoDB driver, okay?
And so, what we're gonna do
to identify this error
is use this 11,000 code here.
All right?
So, we have one handler for the CastError.
Let's now create one for the case
that we have that error.code,
.code equal to 11,000.
So in that case, all error should be equal
to the error returns from handleDuplicateFields
and again, I'm adding DB here
just so we know that this has to do with our database.
All right?
And, so let's now actually then create this function.
And now, the message that we're gonna send
is this one so let's create it here.
And so I want it to say,
Duplicate field value, and then hear the name
of that value, so let's put that to x for now.
We will generate that a bit later.
So please use another value.
All right?
And so in the case that we just saw,
this x here should be called the Forest Hiker.
So basically, what we're trying to get
out of this error message string here
is this, "The Forest Hiker."
So that is the duplicate value
that we want to send to the client
so that they can now correct it
and create another name.
So, how can we actually extract
this piece of the string here?
Well, we're gonna use a regular expression
to, basically, as I just said,
find the text that is between quotes.
'Cause here in this string, all we have really
to identify this text here,
so to find it, is these quotes.
All right?
And now, as you already know,
regular expressions can be really tough.
And so I usually just Google them
and so let me show you how I actually do that.
In this case, I would simply search
for regular expression match text between quotes.
And then usually it's right the first result.
And then down here we have the result
and so we can use simply this regular expression.
Now I see that we have down here this here.
This also works and it's easier to read.
And it has a bunch of up votes
and so we simply can use this one.
So that should work as well.
So let's copy it and let's go back to our code,
and say that our value,
so const value is equal to the error.ermsg,
so remember, that that was the name of the property.
So, errmsg. So again, that's because
this is an error created by Mongo
and so these is slightly different names.
Okay?
So we have this string and now here we want to match
our regular expression.
So, match, and then in JavaScript,
a regular expression is always between two slashes.
Then paste it here what we just got from Stack Overflow
and let's actually take a look.
So, we're running already in production.
Right now we will not send back any response.
All I want to do now is to take a look at the value.
So, if I sent this now we get this weird response here.
And again, that's because we're not sending any error.
But for now I was really just interested in the value.
And so this, what we see here
in the log now is that value.
And actually it is an array.
But what we're interested in is actually this string here.
So it did actually match all the text
that was between strings and so,
we can say that it worked.
So our regular expression worked.
Now, all we have to say is that we want
the first element of that array.
So, element zero.
And now, let's actually go ahead and return
or new AppError, so new AppError,
paste in the message,
and again the 400 status code for a bad request.
And so let's now try that again.
Again, we are still running a production
and so that code should now run.
And of course, we tried to replace our x.
Of course, we now want our value here.
And so, now we get duplicate field value,
"The Forest Hiker."
Perfect.
And now, next up, in the next video
we will then handle the last of the three errors
which are the validation errors.