Building RESTful APIs with Node.js and Express Mini
Topics
- Building a RESTful API.
- Performing CRUD operations.
- Writing API endpoints.
Assignment
Use Node.js and Express to build an API that performs CRUD operations on users.
Download Project Files and Install Dependencies
- Fork and Clone this repository.
- CD into the folder where you cloned the repository.
- Type
yarn
ornpm install
to download all dependencies listed insidepackage.json
.
Database access
Database access will be done using the db.js
file included inside the data
folder. This file publishes the following methods:
find()
: calling find returns a promise that resolves to an array of all the users contained in the database.findById()
: this method expects anid
as it's only parameter and returns the user corresponding to theid
provided or an empty array if no user with thatid
is found.insert()
: calling insert passing it a user object will add it to the database and return an object with theid
of the inserted user. The object looks like this:{ id: 123 }
.update()
: accepts two arguments, the first is theid
of the user to update and the second is an object with thechanges
to apply. It returns the count of updated records. If the count is 1 it means the record was updated correctly.remove()
: the remove method accepts anid
as it's first parameter and upon successfully deleting the user from the database it returns the number of records deleted.
Now that we have a way to add, update, remove and retrieve data from the provided database, it is time to work on the API.
Start the API and Implement Requirements
- To start the server, type
yarn server
ornpm run server
from the root folder (where the package.json file is). The server is configured to restart automatically as you make changes. - Add the code necessary to implement the API requirements.
- Test the API using Postman as you work through the exercises.
User Schema
Users in the database conform to the following object structure:
{
name: "Jane Doe", // String, required
bio: "Not Tarzan's Wife, another Jane", // String
created_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
updated_at: Mon Aug 14 2017 12:50:16 GMT-0700 (PDT) // Date, defaults to current date
}
Write endpoints to perform the following queries.
Inside index.js
add the code necessary to implement the following endpoints:
Method | URL | Description |
---|---|---|
POST | /api/users | Creates a user using the information sent inside the request body . |
GET | /api/users | Returns an array of all the user objects contained in the database. |
GET | /api/users/:id | Returns the user object with the specified id . |
DELETE | /api/users/:id | Removes the user with the specified id and returns the deleted user. |
PUT | /api/users/:id | Updates the user with the specified id using data from the request body . Returns the modified document, NOT the original. |
Endpoint Specifications
When the client makes a POST
request to /api/users
:
-
If the request body is missing the
name
orbio
property:- cancel the request.
- respond with HTTP status code
400
(Bad Request). - return the following JSON response:
{ errorMessage: "Please provide name and bio for the user." }
.
-
If the information about the user is valid:
- save the new user the the database.
- return HTTP status code
201
(Created). - return the newly created user document.
-
If there's an error while saving the user:
- cancel the request.
- respond with HTTP status code
500
(Server Error). - return the following JSON object:
{ error: "There was an error while saving the user to the database" }
.
When the client makes a GET
request to /api/users
:
- If there's an error in retrieving the users from the database:
- cancel the request.
- respond with HTTP status code
500
. - return the following JSON object:
{ error: "The users information could not be retrieved." }
.
When the client makes a GET
request to /api/users/:id
:
-
If the user with the specified
id
is not found:- return HTTP status code
404
(Not Found). - return the following JSON object:
{ message: "The user with the specified ID does not exist." }
.
- return HTTP status code
-
If there's an error in retrieving the user from the database:
- cancel the request.
- respond with HTTP status code
500
. - return the following JSON object:
{ error: "The user information could not be retrieved." }
.
When the client makes a DELETE
request to /api/users/:id
:
-
If the user with the specified
id
is not found:- return HTTP status code
404
(Not Found). - return the following JSON object:
{ message: "The user with the specified ID does not exist." }
.
- return HTTP status code
-
If there's an error in removing the user from the database:
- cancel the request.
- respond with HTTP status code
500
. - return the following JSON object:
{ error: "The user could not be removed" }
.
When the client makes a PUT
request to /api/users/:id
:
-
If the user with the specified
id
is not found:- return HTTP status code
404
(Not Found). - return the following JSON object:
{ message: "The user with the specified ID does not exist." }
.
- return HTTP status code
-
If the request body is missing the
name
orbio
property:- cancel the request.
- respond with HTTP status code
400
(Bad Request). - return the following JSON response:
{ errorMessage: "Please provide name and bio for the user." }
.
-
If there's an error when updating the user:
- cancel the request.
- respond with HTTP status code
500
. - return the following JSON object:
{ error: "The user information could not be modified." }
.
-
If the user is found and the new information is valid:
- update the user document in the database using the new information sent in the
reques body
. - return HTTP status code
200
(OK). - return the newly updated user document.
- update the user document in the database using the new information sent in the
Stretch Problems
To work on the stretch problems you'll need to enable the cors
middleware. Follow these steps:
- add the
cors
npm module:yarn add cors
ornpm i cors
. - add
server.use(cors())
afterserver.use(express.json())
.
Create a new React application and connect it to your server:
- the React application can be anywhere, but, for this project create it inside the folder for the solution.
- connect to the
/api/users
endpoint in the API and show the list of users. - add a delete button to each displayed user that will remove it from the server.
- add forms to add and update data.
- Style the list of users however you see fit.