Giter Club home page Giter Club 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

luishrd avatar ladrillo avatar karthikv avatar seanchen1991 avatar dvwhite avatar kaleb-rupe avatar zoelud 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.