Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
      You have completed Practice ExpressJS: Middleware!
      
    
You have completed Practice ExpressJS: Middleware!
Preview
    
      
  This video shows my solution to the challenge.
Resources
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
                      Welcome back.
                      0:00
                    
                    
                      How did it go?
                      0:00
                    
                    
                      If you weren't able to complete
the entire challenge don't worry,
                      0:02
                    
                    
                      you can see my solution here and
go back and try it again.
                      0:06
                    
                    
                      To get started,
I imported the users array from data.json.
                      0:09
                    
                    
                      Then I defined a named export that
provides our middleware function and
                      0:14
                    
                    
                      named it authUser.
                      0:18
                    
                    
                      I immediately checked if there was a query
on the request object named username,
                      0:20
                    
                    
                      and if not, I redirected
the response to the forbidden route.
                      0:25
                    
                    
                      Because this conditional statement
only has one action to execute,
                      0:29
                    
                    
                      I've omitted the curly braces and
placed it all on one line for readability.
                      0:33
                    
                    
                      Next, I defined a variable and
                      0:37
                    
                    
                      set it equal to our queries
username forced to lowercase.
                      0:40
                    
                    
                      To see if there is a match
between the provided username and
                      0:44
                    
                    
                      our mock database I use the find method.
                      0:48
                    
                    
                      If you're unfamiliar with find,
it's a very handy tool for us.
                      0:50
                    
                    
                      It searches an array for the first
element that satisfies a provided testing
                      0:55
                    
                    
                      function, and returns the element,
or undefined if no element is found.
                      0:59
                    
                    
                      Check the teacher's notes for a link
to learn more about the find method.
                      1:04
                    
                    
                      In this case,
I'm checking my username variable
                      1:08
                    
                    
                      against each of the user's names in
data.json forced to lowercase as well.
                      1:12
                    
                    
                      Now, I can verify whether the match
variable holds a truthy value using
                      1:17
                    
                    
                      the if-match condition.
                      1:21
                    
                    
                      In the event of a match,
                      1:23
                    
                    
                      I proceed by creating a current user
property on the request object and
                      1:24
                    
                    
                      assigning it the value from our
matched object's name property.
                      1:28
                    
                    
                      Following this,
I invoke the next function.
                      1:32
                    
                    
                      Conversely, if no match is found, I set
the status of the response object to 401
                      1:35
                    
                    
                      and send a new message to the user,
indicating that no match was found.
                      1:40
                    
                    
                      Awesome, let's finish up in app.js.
                      1:44
                    
                    
                      First, I needed to import
my authUser function.
                      1:48
                    
                    
                      Then I simply needed to add this to
the two protected routes as the first
                      1:52
                    
                    
                      middleware in the stack
directly after the route.
                      1:56
                    
                    
                      And that's it.
                      2:00
                    
                    
                      Let's double-check that this
all works in the browser.
                      2:01
                    
                    
                      Here's the home page.
                      2:03
                    
                    
                      I'll try both of our
routes without a username.
                      2:05
                    
                    
                      They're both redirecting
us to the forbidden path.
                      2:09
                    
                    
                      Perfect.
                      2:12
                    
                    
                      Now I'll try them with
an incorrect username
                      2:14
                    
                    
                      Great, we're getting our
custom message on both.
                      2:23
                    
                    
                      Now I'll try secret with
the correct username and it works.
                      2:25
                    
                    
                      And lastly, the settings page.
                      2:30
                    
                    
                      We're getting access and
it's printing my username correctly.
                      2:35
                    
                    
                      Wonderful.
                      2:38
                    
                    
                      Was your solution different than mine?
                      2:40
                    
                    
                      If so, that's great.
                      2:42
                    
                    
                      It's always nice to see how many different
approaches can be taken to solve
                      2:43
                    
                    
                      the same issues when coding.
                      2:47
                    
                    
                      I hope you enjoyed this exercise.
                      2:48
                    
                    
                      I'll see you next time, and
until then, happy coding.
                      2:50
                    
              
        You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up