Assignment 1
For the first assignment, you will be setting up a basic server with 3 simple GET endpoints.
Set up your project
First, let's set up your first Node project!
To create a project, first make a folder for your assignment code using mkdir a1
in terminal and change into that directory with cd a1
. You can then use the command code .
to open that folder in VSCode (install VSCode here). You can also just open it in VSCode from the application directly.
Set up the yarn project by running yarn init -y
in that a1
folder. Add the necessary dependencies: express
, typescript
, ts-node
, @types/node
, @types/express
by running:
yarn init -y
yarn add express
yarn add --dev typescript ts-node @types/express
info
Check out Lecture 2 for more details on how this setup works!
Now you can create an index.ts
file to add your routes and assignment code in.
Endpoints
1. Simple URL
The first endpoint will be a simple GET
request to /book
. You will send your favorite book's name to the frontend.
2. Query Parameters
The second endpoint will be a GET
request to /book
with a query parameter called name
. If the name is "Peter", you will return "Cracking the Coding Interview". If the name is "Becky", you will return "The Pragmatic Programmer". Otherwise, return the name of any book you choose!
Example: a request to /book?name=peter
will return "Cracking the Coding Interview."
P.S. Don't worry, these aren't actually our favorite books.
3. Route Parameters
The third endpoint will be a GET
request to /book/:userid
. This will simply send "userid
is really cool!" to the frontend.
Example: a request to /book/peter
will send "peter is really cool!" to the frontend.
Testing your code
To test your code, run ts-node index.ts
. Your server should be up and running (if not, debug!) and you should be able to navigate to localhost:<PORT>/book
where PORT is the port number express is listening for requests on (we usually use 8080
) and specify query/path parameters that give the intended results.
Submission
Please submit to CMS the index.ts
file in which you've defined your routes by Thursday 3/11 at 3:59pm. You are allowed max 3 slip days (out of 6 total for all assignments and the final project) per an assignment.
FAQ
Does case-sensitivity matter for the /book
query parameter?
We won't discount you for this when grading, but when it comes to implementing things like this as a software engineer, it's up to you to make the best possible design decision!
What's the difference between a route and query parameter?
Query parameters come after a ?
in a route. For example: with /books?name=Megan
, Megan
' would be in req.query.name
. We could make the query parameter name anything we
want, from id
to pizza
and we could access it through req.query.paramName
.
Route parameters are an actual part of the route and come after a :
. For example: with /books/:userid
, in the request /books/Megan
, 'Megan'
would be in req.params.userid
.
Two endpoints for the same path?!?!? What's going on?
This is allowed and not a typo. While you might need to make two endpoints if you need to handle a route's path parameters (say /users
and and /users/:id
), think about what the query parameters would be from visiting route /book
rather than /book?name=megan
, and see if you can consolidate the logic into just one endpoint: req.query.name
will have some kind of value no matter what, even if you don't pass in a query parameter value.
Extra aside: you might have heard of REST APIs: they all follow certain design principles that allow developers to know what to expect based on an abstract specification of what the API routes do. Generally, REST APIs use path params to identify a specific resource, and query params to filter those resources.
I still need help. Where should I go?
Check out the office hours schedule on our syllabus. In addition, you can join the Ed and post your question.