Project for Node API 2 Module
Use Node.js
and Express
to build an API that performs CRUD operations on blog posts
.
Your assignment page on Canvas should contain instructions for submitting this project. If you are still unsure, reach out to School Staff.
Task 2: Minimum Viable Product Add the code necessary toindex.js
, api/server.js
and api/posts/posts-router.js
to implement the endpoints listed below.
Separate the endpoints that begin with /api/posts
into a separate Express Router inside api/posts/posts-router.js
.
Configure the API to handle to the following routes. Some of these endpoints might require more than one call to the provided database helpers inside api/posts/posts-model.js
.
N | Method | Endpoint | Description |
---|---|---|---|
1 | GET | /api/posts | Returns an array of all the post objects contained in the database |
2 | GET | /api/posts/:id | Returns the post object with the specified id |
3 | POST | /api/posts | Creates a post using the information sent inside the request body and returns the newly created post object |
4 | PUT | /api/posts/:id | Updates the post with the specified id using data from the request body and returns the modified document, not the original |
5 | DELETE | /api/posts/:id | Removes the post with the specified id and returns the deleted post object |
6 | GET | /api/posts/:id/comments | Returns an array of all the comment objects associated with the post with the specified id |
500
.
return the following JSON: { message: "The posts information could not be retrieved" }
.
2 [GET] /api/posts/:id
If the post with the specified id
is not found:
404
(Not Found).
return the following JSON: { message: "The post with the specified ID does not exist" }
.
If there's an error in retrieving the post from the database:
respond with HTTP status code500
.
return the following JSON: { message: "The post information could not be retrieved" }
.
3 [POST] /api/posts
If the request body is missing the title
or contents
property:
400
(Bad Request).
return the following JSON: { message: "Please provide title and contents for the post" }
.
If the information about the post is valid:
save the new post the the database. return HTTP status code201
(Created).
return the newly created post.
If there's an error while saving the post:
respond with HTTP status code500
(Server Error).
return the following JSON: { message: "There was an error while saving the post to the database" }
.
4 [PUT] /api/posts/:id
If the post with the specified id
is not found:
404
(Not Found).
return the following JSON: { message: "The post with the specified ID does not exist" }
.
If the request body is missing the title
or contents
property:
400
(Bad Request).
return the following JSON: { message: "Please provide title and contents for the post" }
.
If there's an error when updating the post:
respond with HTTP status code500
.
return the following JSON: { message: "The post information could not be modified" }
.
If the post is found and the new information is valid:
update the post document in the database using the new information sent in therequest body
.
return HTTP status code 200
(OK).
return the newly updated post.
5 [DELETE] /api/posts/:id
If the post with the specified id
is not found:
404
(Not Found).
return the following JSON: { message: "The post with the specified ID does not exist" }
.
If there's an error in removing the post from the database:
respond with HTTP status code500
.
return the following JSON: { message: "The post could not be removed" }
.
6 [GET] /api/posts/:id/comments
If the post with the specified id
is not found:
404
(Not Found).
return the following JSON: { message: "The post with the specified ID does not exist" }
.
If there's an error in retrieving the comments from the database:
respond with HTTP status code500
.
return the following JSON: { message: "The comments information could not be retrieved" }
.
Database Persistence Helpers
The data
folder contains a database populated with test posts
.
Database access will be done using the posts-model.js
file included inside the api/posts
folder:
find()
: calling find returns a promise that resolves to an array of all the posts
contained in the database.
findById()
: this method expects an id
as it's only argument and returns a promise that resolves to the post corresponding to the id
provided or undefined
if no post with that id
is found.
insert()
: calling insert passing it a post
object will add it to the database and return a promise that resolves to an object with the id
of the inserted post. The object looks like this: { id: 123 }
.
update()
: accepts two arguments, the first is the id
of the post to update and the second is an object with the changes
to apply. It returns a promise that resolves to the count of updated records. If the count is 1 it means the record was updated correctly.
remove()
: the remove method accepts an id
as its first argument and upon successfully deleting the post from the database it returns a promise that resolves to the number of records deleted.
findPostComments()
: the findPostComments accepts a postId
as its first argument and returns a promise that resolves to an array of all comments on the post associated with the post id.
Blog Post Schema
A Blog Post in the database has the following structure:
{ title: "The post title", // String, required contents: "The post contents", // String, required 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 } Comment Schema
A Comment in the database has the following structure:
{
text: "The text of the comment", // String, required
post_id: "The id of the associated post", // Integer, required, must match the id of a post entry in the database
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
}
Important Notes
Reset the database by executing npm run resetdb
.
Test your work manually using Postman or HTTPie. Run automatic tests by executing npm test
.
You are welcome to create additional files but do not move or rename existing files or folders.
Do not alter your package.json
file except to install additional libraries or add additional scripts. Do not update existing libs.
In your solution, it is essential that you follow best practices and produce clean and professional results.
Task 3: Stretch Problems
To work on the stretch problems you'll need to enable the cors
middleware. Follow these steps:
cors
npm module: npm i cors
.
add server.use(cors())
after server.use(express.json())
.
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。