{"id":51123286,"url":"https://github.com/iamskyy666/jobs-api-nodejs","last_synced_at":"2026-06-25T05:01:16.306Z","repository":{"id":363874898,"uuid":"1265325638","full_name":"iamskyy666/jobs-api-nodejs","owner":"iamskyy666","description":"🟢 Secure REST API for managing job applications with JWT authentication, MongoDB, Express, and Mongoose. Designed to be consumed by any frontend application. 💼","archived":false,"fork":false,"pushed_at":"2026-06-10T17:47:22.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T19:18:51.609Z","etag":null,"topics":["backend-development","bcryptjs","expressjs","jwt-authentication","mongodb","mongoose","nodejs","nosql","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iamskyy666.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-10T17:10:14.000Z","updated_at":"2026-06-10T17:48:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iamskyy666/jobs-api-nodejs","commit_stats":null,"previous_names":["iamskyy666/jobs-api-nodejs"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/iamskyy666/jobs-api-nodejs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamskyy666%2Fjobs-api-nodejs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamskyy666%2Fjobs-api-nodejs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamskyy666%2Fjobs-api-nodejs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamskyy666%2Fjobs-api-nodejs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iamskyy666","download_url":"https://codeload.github.com/iamskyy666/jobs-api-nodejs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iamskyy666%2Fjobs-api-nodejs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34760219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["backend-development","bcryptjs","expressjs","jwt-authentication","mongodb","mongoose","nodejs","nosql","rest-api"],"created_at":"2026-06-25T05:01:13.948Z","updated_at":"2026-06-25T05:01:16.289Z","avatar_url":"https://github.com/iamskyy666.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jobster - API 💻\n\n## Live API\n\nBase URL:\nhttps://jobs-api-nodejs-v28f.onrender.com\n\nA secure RESTful API built with Node.js, Express, MongoDB, and JWT Authentication that allows users to manage their job search activities.\n\nEach user can create, view, update, and delete their own job records after authenticating with JSON Web Tokens (JWT).\n\n---\n\n## Features\n\n* User Registration\n* User Login \u0026 Authentication\n* Password Hashing with bcrypt\n* JWT-Based Authorization\n* Protected Routes\n* Create Job Records\n* View All Jobs\n* View Single Job\n* Update Existing Jobs\n* Delete Jobs\n* User-Specific Data Access\n* Global Error Handling\n* Rate Limiting\n* Security Headers with Helmet\n* Cross-Origin Resource Sharing (CORS)\n* MongoDB Validation\n* Duplicate Email Protection\n\n---\n\n## Tech Stack\n\n### Backend\n\n* Node.js\n* Express.js\n* MongoDB\n* Mongoose\n\n### Authentication \u0026 Security\n\n* JSON Web Token (JWT)\n* bcryptjs\n* helmet\n* cors\n* express-rate-limit\n\n### Utilities\n\n* dotenv\n* http-status-codes\n* validator\n* nodemon\n\n---\n\n## API Endpoints\n\n### Authentication\n\n#### Register User\n\n```http\nPOST /api/v1/auth/register\n```\n\nRequest Body:\n\n```json\n{\n  \"name\": \"John Doe\",\n  \"email\": \"john@example.com\",\n  \"password\": \"password123\"\n}\n```\n\nResponse:\n\n```json\n{\n  \"message\": \"User registered successfully\",\n  \"user\": {\n    \"name\": \"John Doe\"\n  },\n  \"token\": \"JWT_TOKEN\"\n}\n```\n\n---\n\n#### Login User\n\n```http\nPOST /api/v1/auth/login\n```\n\nRequest Body:\n\n```json\n{\n  \"email\": \"john@example.com\",\n  \"password\": \"password123\"\n}\n```\n\nResponse:\n\n```json\n{\n  \"message\": \"Logged-In successfully\",\n  \"user\": {\n    \"name\": \"John Doe\"\n  },\n  \"token\": \"JWT_TOKEN\"\n}\n```\n\n---\n\n### Jobs\n\nAll Jobs routes require a valid JWT.\n\nHeader:\n\n```http\nAuthorization: Bearer \u003cJWT_TOKEN\u003e\n```\n\n---\n\n#### Create Job\n\n```http\nPOST /api/v1/jobs\n```\n\nRequest Body:\n\n```json\n{\n  \"company\": \"Google\",\n  \"position\": \"Software Engineer\"\n}\n```\n\n---\n\n#### Get All Jobs\n\n```http\nGET /api/v1/jobs\n```\n\nReturns all jobs belonging to the authenticated user.\n\n---\n\n#### Get Single Job\n\n```http\nGET /api/v1/jobs/:id\n```\n\nReturns a single job if it belongs to the authenticated user.\n\n---\n\n#### Update Job\n\n```http\nPATCH /api/v1/jobs/:id\n```\n\nRequest Body:\n\n```json\n{\n  \"company\": \"Microsoft\",\n  \"position\": \"Backend Developer\"\n}\n```\n\n---\n\n#### Delete Job\n\n```http\nDELETE /api/v1/jobs/:id\n```\n\nDeletes the specified job if it belongs to the authenticated user.\n\n---\n\n## Authentication Flow\n\n### Register\n\n1. User submits registration details.\n2. Password is hashed using bcrypt.\n3. User is saved to MongoDB.\n4. JWT token is generated.\n5. Token is returned to the client.\n\n### Login\n\n1. User submits email and password.\n2. Credentials are verified.\n3. Password is compared against the stored hash.\n4. JWT token is generated.\n5. Token is returned to the client.\n\n### Protected Routes\n\n1. Client sends JWT in the Authorization header.\n2. Authentication middleware verifies the token.\n3. User information is attached to the request object.\n4. Access is granted to protected resources.\n\n---\n\n## Security\n\n### Helmet\n\nSets secure HTTP response headers.\n\n### Rate Limiting\n\nLimits excessive requests from the same IP address.\n\nCurrent configuration:\n\n* Window: 15 minutes\n* Max Requests: 100\n\n### Password Hashing\n\nPasswords are hashed before storage using bcrypt.\n\n### JWT Authentication\n\nProtected routes require a valid signed JWT.\n\n---\n\n## Environment Variables\n\nCreate a `.env` file in the root directory:\n\n```env\nPORT=3000\n\nMONGO_URI=your_mongodb_connection_string\n\nJWT_SECRET=your_super_secret_jwt_key\n```\n\n---\n\n## Installation\n\nClone the repository:\n\n```bash\ngit clone \u003crepository-url\u003e\n```\n\nNavigate to the project:\n\n```bash\ncd jobs-api\n```\n\nInstall dependencies:\n\n```bash\nnpm install\n```\n\nStart the development server:\n\n```bash\nnpm run dev\n```\n\nStart production server:\n\n```bash\nnpm start\n```\n\n---\n\n## Project Structure\n\n```text\njobs-api\n│\n├── controllers\n│   ├── auth.controller.js\n│   └── jobs.controller.js\n│\n├── db\n│   └── connectDB.js\n│\n├── errors\n│\n├── middleware\n│   ├── authentication.middleware.js\n│   ├── error-handler.middleware.js\n│   └── not-found.middleware.js\n│\n├── models\n│   ├── User.model.js\n│   └── Job.model.js\n│\n├── routes\n│   ├── auth.router.js\n│   └── jobs.router.js\n│\n├── .env\n├── app.js\n├── package.json\n└── README.md\n```\n\n---\n\n## Future Improvements\n\n* Logout Endpoint\n* Role-Based Authorization\n* API Documentation with Swagger/OpenAPI\n* Docker Support\n* Automated Testing\n\n---\n\n## Author\n\n**Soumadip Banerjee**\n\nJunior Software Engineer | MERN Stack Developer | Backend Development Enthusiast\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamskyy666%2Fjobs-api-nodejs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiamskyy666%2Fjobs-api-nodejs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiamskyy666%2Fjobs-api-nodejs/lists"}