{"id":20580019,"url":"https://github.com/iyashwantsaini/node_rest","last_synced_at":"2026-04-06T09:33:11.070Z","repository":{"id":112237802,"uuid":"287786222","full_name":"iyashwantsaini/node_REST","owner":"iyashwantsaini","description":"Node.js | Express.js | mongoDB | REST API","archived":false,"fork":false,"pushed_at":"2020-08-18T13:15:02.000Z","size":222,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-14T10:39:45.048Z","etag":null,"topics":["expressjs","mongodb","nodejs","rest-api"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iyashwantsaini.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-15T16:43:23.000Z","updated_at":"2020-08-18T13:15:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"f6d36fb3-f762-443e-9cdf-b193c7483c11","html_url":"https://github.com/iyashwantsaini/node_REST","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/iyashwantsaini/node_REST","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyashwantsaini%2Fnode_REST","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyashwantsaini%2Fnode_REST/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyashwantsaini%2Fnode_REST/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyashwantsaini%2Fnode_REST/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iyashwantsaini","download_url":"https://codeload.github.com/iyashwantsaini/node_REST/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iyashwantsaini%2Fnode_REST/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31466625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T08:36:52.050Z","status":"ssl_error","status_checked_at":"2026-04-06T08:36:51.267Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["expressjs","mongodb","nodejs","rest-api"],"created_at":"2024-11-16T06:19:46.800Z","updated_at":"2026-04-06T09:33:11.053Z","avatar_url":"https://github.com/iyashwantsaini.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# REST API\n\nNode.js | Express.js | mongoDB | REST API\n\n- REST : Representational State Transfer.\n- RESTful API's are Stateless Backends.\n- GET, POST, PUT, PATCH, DELETE.\n- Data can be JSON, XML, URLEncoded, FormData.\n\n## Contraints\n\n- Client-Server Architecture.\n- Stateless.\n- Cacheability.\n- Layered System.\n- Uniform Interface.\n- Code on Demand(optional).\n\n## Endpoints\n\n- /products/{get,post}\n- /products/\\_prodid{patch,delete}\n- /orders/{get,post}\n- /orders/\\_prodid{patch,delete}\n- /users/signup{post}\n\n## Features\n\n- GET / get\n\n```\nTo Access :\n{url}/\n```\n\n- ADD / post\n\n```\nTo Access :\n{url}/\n```\n\n```\nTo Add :\n\nEg. Add product :\n{\n    \"name\":\"_name\",\n    \"price\":_price\n}\n\nEg. Add Order :\nDue to multer we'll now need to send FORMdata instead\nSend file (img) alone\n{\n    \"productID\":\"_prodid\",\n    \"quantity\":_quantity\n}\n\n```\n\n- UPDATE / patch\n\n```\nTo Access :\n{url}/_product_id\n```\n\n```\nTo Update :\n(pass array as we are iterating it to dynamically get only required params)\n[\n    {\n        \"propName\":\"_prop_you_want_to_edit\",\"value\":\"_value_of_prop_u_wanna_set\"\n    }\n]\n```\n\n```\nEg. Update Book Name :\n\nGoTo : {url}/_product_id\n\n[\n    {\n        \"propName\":\"Lord Of Rings\",\n        \"value\":\"Lord Of The Rings\"\n    }\n]\n\n```\n\n- DELETE / delete\n\n```\nTo Delete :\n{url}/_product_id\n```\n\n- Add User / signup\n\n```\n{\n    \"email\":\"test@test.com\",\n    \"password\":\"tester\"\n}\n```\n\n- Get JWT / login\n\n```\n{\n    \"email\":\"test@test.com\",\n    \"password\":\"tester\"\n}\n\nA JWT is returned which can be saved by the client for further requests.\n```\n\n- For all Requests {get/post}\n```\nSend token with the headers in your request to API.\nAuthorization: Bearer your_token\n```\n\n## Asset Upload\n\n- Using MULTER (img upload)\n\n## User Auth\n\n- REST : Stateless : no \"session\".\n- Client sends auth data.\n- Server provides a token.\n- Client stores the token.\n- Client with a token can access API.\n- Client sends a token with every request.\n- Token : JSON data + Signature : Json Web Token (JWT)\n- Try decoding the received token on [JWT.IO](jwt.io)\n\n## Salting\n\n- Adding random strings to our password before hashing.\n- This way no one can search a hash dictionary on internet to get translation for our hash.\n\n## CORS\n\n- CORS : Cross-Origin Resource Sharing\n- If CLIENT request is from same SERVER : SUCCESS.\n- If CLIENT request is from diff SERVER : FAILURE.\n- Send correct headers to overcome CORS.\n\n## .ENV Variables\n\n- Create a new file nodemon.json :\n\n```\n{\n    \"env\":{\n        \"MONGO_PASS\":\"_pass\",\n        \"MONGO_DB_NAME\":\"_dbname\",\n        \"JWT_KEY\":\"xxxxxxxx\"\n    }\n}\n```\n\n## Status Codes\n\n- 200 : operation successful\n- 201 : asset created successfully\n- 404 : not found\n- 500 : unexpected error in fulfilling request\n- 409 : conflict\n- 422 : unprocessable entity\n- 401 : unauthorized client\n\n## Packages\n\n- express\n- nodemon( for autorestart )\n- morgan ( for login )\n- body-parser( parsing bodies to make them readable )\n- mongoose ( unofficial mongo client )\n- multer( can also parse incoming FormData Bodies having images etc.)\n- bcrypt( to hash passwords for security )\n- jsonwebtoken( to create a JWT for user auth)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiyashwantsaini%2Fnode_rest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiyashwantsaini%2Fnode_rest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiyashwantsaini%2Fnode_rest/lists"}