# 2006-FSA Cookie Jar: Express (101 and 201) & Async/Await Put your pending and outstanding questions here 👇 Make the question in H2 tag by using '##' ## If headers have key-value pairs, can you access them the same way you would an object? - **Answer:** Absolutely. If it looks like an object, smells like an object, it's an object and can be treated as so. When using variables to access a key, use bracket notation. When you know the exact key name, use dot notation. ## What's the -D flag on the curl request to `google.com` in your example? - **Answer:** Go to your terminal and run `curl --help`, let's search for this flag by holding the `command` button on your keyboard and hitting the `F` key for "find". In a nut shell, the `-D` flag returns the headers. Per curl's help feature, we can even add another argument after `-D` to have those heads saved into a file on our machine. In our lecture example, we left that argument out by passing `-`. - **Reference:** `curl -D - http://www.google.com` ## Where do you get commands for Express? - **Answer:** If by "commands" you mean "methods", they are a part of Express (built-in). Please refer to the [documentation](https://expressjs.com/). ## What is happening under-the-hood with Express as it pertains to http request/response data conversion? - **Question (cont):** +1 from [Daniel] - could you please code it out/demo and compare them step-by-step using the `server` keyword vs. `express()/app()`, as well? - **Answer 1:** - I need more clarification as to what you mean by "data conversion". **All HTTP messages** are formatted in a way as displayed in the lecture's slide deck: - Request line comprised of the request method (i.e. verb - GET, POST, PUT, etc.), URI (i.e. path), and the HTTP version (e.g. HTTP/1.1). - Request headers (i.e. name: value pairs) - A blank line always separates the header and body - Request body (Note: HTTP requests typically won't have a request body if there isn't information to send to the server (e.g. GET requests). However, in the case when we're creating (e.g. POST requests), let's say, a new account on a website then we need to send that user inputted form information to the server via the request body.) - Remember, this is represented as a string. Express handles converting it into a format that is easily digestible for us developers. If you're curious about under-the-hood implementation, I think this is a perfect opportunity to explore this by diving into Express documentation, sifting around the `express` directory in your `node_modules` folder, OR trying to implement it on your own using pure JavaScript. - **Answer 2:** Unfortunately, there isn't time to do a side-by-side live code of the `http` and `express` modules, but I think it's a great idea to use the slide deck as a reference and try it on your own! The code in the slides have all the pieces you need to do exactly that. ## What exactly is a port? Could you go over how request links work again? - **Answer:** An airport is to a server, as a gate is to a port. In our case of developing on our local machines, our "localhost" is our server, and we're choosing a PORT to listen on for incoming requests (e.g. 3000, 1337, 8080). Here are some articles: - https://computer.howstuffworks.com/web-server8.htm - https://www.quora.com/What-is-a-server-port-number ## When you invoke next(), how does it know what's next? - **Answer:** It will continue iterating through our array of endpoints we created using our Express framework incrementally. Think of it as a `for` loop with a reference to `i` and just picks back up at `i++`. ## What would the passed code be doing without the middleware logging/morgan? Why is morgan/volleyball necessary? - **Question (cont):** +1 - `morgan` vs. `volleyball`? - **Answer:** Simply to log information for us: - Type of request (method/verb) - URI (API endpoint) - [HTTP status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) ## Spread operator for both Array and Object, could we please do a quick walkthrough? - **Answer:** Please refer to the MDN documentation: - [Spread syntax (...)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) - Use the sandbox to play around with it. ## What is 'try' and 'catch' on the Async / Await code? - **Answer:** Please refer to the MDN documentation: - [`try...catch`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch)