Giter Site home page Giter Site logo

node-api3-project's Introduction

Express Middleware Module Project

In this challenge, you build an API and write custom middleware that satisfies the requirements listed under the Minimum Viable Product section.

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

  • Wire the application together completing api/server.js and index.js.
  • Write four custom middleware functions detailed below, in api/middleware/middleware.js.
  • Use the custom middlewares in their appropriate places in the application (specific endpoints, entire routes or globally).
  • There are endpoints in users-router.js to retrieve the list of posts by a user and to store a new post for a user.

Custom Middleware Requirements

  • logger()

    • logger logs to the console the following information about each request: request method, request url, and a timestamp
    • this middleware runs on every request made to the API
  • validateUserId()

    • this middleware will be used for all user endpoints that include an id parameter in the url (ex: /api/users/:id and it should check the database to make sure there is a user with that id.
    • if the id parameter is valid, store the user object as req.user and allow the request to continue
    • if the id parameter does not match any user id in the database, respond with status 404 and { message: "user not found" }
  • validateUser()

    • validateUser validates the body on a request to create or update a user
    • if the request body lacks the required name field, respond with status 400 and { message: "missing required name field" }
  • validatePost()

    • validatePost validates the body on a request to create a new post
    • if the request body lacks the required text field, respond with status 400 and { message: "missing required text field" }

Database Persistence Helpers

There are two helper files that you can use to manage the persistence of users and posts data. These files are api/users/users-model.js and api/posts/posts-model.js. Both files publish the following api:

  • get(): calling find returns a promise that resolves to an array of all the resources contained in the database.
  • getById(): takes an id as the argument and returns a promise that resolves to the resource with that id if found.
  • insert(): calling insert passing it a resource object will add it to the database and return the new resource.
  • update(): accepts two arguments, the first is the id of the resource to update and the second is an object with the changes to apply. On success it returns the updated record.
  • remove(): the remove method accepts an id as it's first parameter and, upon successfully deleting the resource from the database, returns the number of records deleted.

The users-model.js includes an extra method called getUserPosts() that when passed a user's id, returns a list of all the posts for the user.

All helper methods return a promise.

Database Schemas

The Database Schemas for the users and posts resources are:

Users
field data type metadata
id unsigned integer primary key, auto-increments, generated by database
name string required, unique
Posts
field data type metadata
id unsigned integer primary key, auto-increments, generated by database
text text required
user_id unsigned integer required, must be the id of an existing user

We have provided test data for the resources.

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.

node-api3-project's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

node-api3-project's Issues

reword instructions for validateUserId middleware

Clarify: validateUserId validates the user id on every request that expects a user id parameter. , so students understand where it is used and that req.params.id will have the user id.

To test for non existing body data, have students comment out the express.json() middleware.

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.