Giter VIP home page Giter VIP logo

node-api2-project's Introduction

Server Side Routing Module Project

Introduction

Use Node.js and Express to build an API that performs CRUD operations on blog posts.

Instructions

Task 1: Project Setup and Submission

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 to index.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

1 [GET] /api/posts

  • If there's an error in retrieving the posts from the database:
    • respond with HTTP status code 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:

    • return HTTP status code 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 code 500.
    • 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:

    • respond with HTTP status code 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 code 201 (Created).
    • return the newly created post.
  • If there's an error while saving the post:

    • respond with HTTP status code 500 (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:

    • return HTTP status code 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:

    • respond with HTTP status code 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 code 500.
    • 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 the request 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:

    • return HTTP status code 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 code 500.
    • 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:

    • return HTTP status code 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 code 500.
    • 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:

  • add the cors npm module: npm i cors.
  • add server.use(cors()) after server.use(express.json()).

node-api2-project's People

Contributors

dvwhite avatar karthikv avatar ladrillo avatar luishrd avatar seanchen1991 avatar zoelud avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.