UNPKG

create-bodhi-node-boilerplate

Version:

Create a Node.js project with basic folder structure and server setup

323 lines (250 loc) • 8.15 kB
# Create Bodhi Node Boilerplate A powerful Node.js boilerplate generator with JWT authentication, MongoDB integration, and a beautiful ASCII art banner. ## Installation & Usage You can create a new project in three ways: ### 1. Using npx (Recommended) ```bash # Create a new project npx create-bodhi-node-boilerplate my-project # Navigate to project cd my-project # Install dependencies npm install # Start development server npm run dev ``` ### 2. Using npm globally ```bash # Install package globally npm install -g create-bodhi-node-boilerplate # Create a new project create-bodhi-node-boilerplate my-project # Navigate to project cd my-project # Install dependencies npm install # Start development server npm run dev ``` ### 3. Using npm init ```bash # Create a new project npm init bodhi-node-boilerplate my-project # Navigate to project cd my-project # Install dependencies npm install # Start development server npm run dev ``` ## Features - šŸš€ Express.js server setup - šŸ” JWT Authentication (access & refresh tokens) - šŸ“¦ MongoDB integration - šŸŽØ Beautiful ASCII art banner - šŸ”„ Auto-reload with nodemon - ⚔ Environment variable configuration - šŸ›”ļø CORS enabled - šŸŽÆ Clean project structure A production-ready Node.js REST API boilerplate with authentication, security, and best practices built-in. ## A Note from the Creator šŸ’­ Just as frontend developers have create-react-app to jumpstart their React projects, backend developers deserve a robust solution for Node.js applications. That's why I created bodhi-node-boilerplate - to provide backend developers with a production-ready, feature-rich foundation for their REST APIs. No more spending hours on boilerplate code or worrying about security configurations. With Bodhi Node App, you get a professionally structured Node.js application with all the essential features you need to build secure, scalable APIs. Created with ā¤ļø by Bodheesh ## Support 🌟 If you find this project helpful, please give it a star ⭐ on GitHub! It helps more developers discover this tool. ## Why Bodhi Node App? šŸ¤” While frontend developers have had tools like create-react-app for years, backend developers have been left to configure their Node.js applications from scratch. Bodhi Node boilerplate changes that by providing: - šŸ”’ Production-ready JWT authentication - šŸ›”ļø Security best practices out of the box - šŸ“ API documentation with examples - šŸ”„ Refresh token rotation - šŸŽÆ Clean and scalable project structure ## Project Structure ``` my-project/ ā”œā”€ā”€ src/ │ ā”œā”€ā”€ config/ │ │ └── config.js # Configuration management │ ā”œā”€ā”€ controllers/ │ │ ā”œā”€ā”€ authController.js # Authentication logic │ │ └── userController.js # User management │ ā”œā”€ā”€ middleware/ │ │ └── auth.js # JWT verification │ ā”œā”€ā”€ models/ │ │ └── userModel.js # User schema and methods │ ā”œā”€ā”€ routes/ │ │ ā”œā”€ā”€ authRoutes.js # Auth endpoints │ │ └── userRoutes.js # User endpoints │ ā”œā”€ā”€ utils/ │ │ └── ascii-art.js # ASCII banner │ └── app.js # Express app setup ā”œā”€ā”€ .env # Environment variables └── package.json # Project dependencies ``` ## API Endpoints ### Authentication - `POST /api/v1/auth/register` - Register a new user - `POST /api/v1/auth/login` - Login user - `GET /api/v1/auth/me` - Get current user profile (protected) - `POST /api/v1/auth/refresh-token` - Refresh access token - `POST /api/v1/auth/logout` - Logout user (protected) ### User Management - `PUT /api/v1/users/profile` - Update user's profile (protected) - `DELETE /api/v1/users/account` - Delete user's account (protected) ## API Testing ### Using cURL #### Authentication APIs 1. Register a new user ```bash curl -X POST http://localhost:7000/api/v1/auth/register \ -H "Content-Type: application/json" \ -d '{ "username": "johndoe", "email": "john@example.com", "password": "password123" }' ``` 2. Login ```bash curl -X POST http://localhost:7000/api/v1/auth/login \ -H "Content-Type: application/json" \ -d '{ "email": "john@example.com", "password": "password123" }' ``` 3. Get Current User Profile (Protected) ```bash curl -X GET http://localhost:7000/api/v1/auth/me \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` 4. Refresh Token ```bash curl -X POST http://localhost:7000/api/v1/auth/refresh-token \ -H "Content-Type: application/json" \ -d '{ "refreshToken": "YOUR_REFRESH_TOKEN" }' ``` 5. Logout (Protected) ```bash curl -X POST http://localhost:7000/api/v1/auth/logout \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` #### User Management APIs 1. Update User Profile (Protected) ```bash curl -X PUT http://localhost:7000/api/v1/users/profile \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "username": "johndoe_updated", "email": "john.updated@example.com" }' ``` 2. Delete Account (Protected) ```bash curl -X DELETE http://localhost:7000/api/v1/users/account \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" ``` ### Using Postman 1. Download the Postman collection: - [Bodhi Node Auth API Collection](https://raw.githubusercontent.com/yourusername/bodhi-node-boilerplate/main/postman/collection.json) 2. Import the collection in Postman: - Open Postman - Click "Import" - Choose the downloaded collection file 3. Set up environment variables in Postman: - Create a new environment (e.g., "Bodhi Local") - Add these variables: - `baseUrl`: http://localhost:7000 - `accessToken`: (will be automatically set after login) - `refreshToken`: (will be automatically set after login) 4. Test Flow: - Register a new user - Login to get tokens - Use other endpoints with the obtained token ### Example API Responses 1. Successful Registration ```json { "success": true, "message": "User registered successfully", "data": { "user": { "id": "user_id", "username": "johndoe", "email": "john@example.com" } } } ``` 2. Successful Login ```json { "success": true, "message": "Login successful", "data": { "user": { "id": "user_id", "username": "johndoe", "email": "john@example.com" }, "tokens": { "accessToken": "eyJhbG...", "refreshToken": "eyJhbG..." } } } ``` ### Error Responses ```json { "success": false, "message": "Error message here", "error": { "code": "ERROR_CODE", "details": "Detailed error message" } } ``` Common error codes: - `AUTH_INVALID_CREDENTIALS`: Invalid email or password - `AUTH_TOKEN_EXPIRED`: JWT token has expired - `AUTH_TOKEN_INVALID`: Invalid JWT token - `USER_NOT_FOUND`: User not found - `VALIDATION_ERROR`: Invalid input data ## Environment Variables The following environment variables are used: ```env PORT=7000 # Server port NODE_ENV=development # Environment mode MONGODB_URI=mongodb://127.0.0.1:27017/my-project # MongoDB connection URL JWT_SECRET=your-secret # JWT signing key JWT_REFRESH_SECRET=your-refresh-secret # Refresh token key JWT_ACCESS_EXPIRE=15m # Access token expiry JWT_REFRESH_EXPIRE=7d # Refresh token expiry ``` ## Prerequisites - Node.js >= 14 - MongoDB >= 4.0 ## Scripts - `npm start` - Start production server - `npm run dev` - Start development server with auto-reload ## MongoDB Setup 1. Install MongoDB Community Server from [mongodb.com](https://www.mongodb.com/try/download/community) 2. Start MongoDB service 3. The app will automatically create the database on first run ## Common Issues 1. **MongoDB Connection Error** - Ensure MongoDB is running - Check if the MongoDB URI in .env is correct - Try using '127.0.0.1' instead of 'localhost' 2. **Port Already in Use** - Change the PORT in .env file - Default port is 7000 ## License MIT ## Contributing Feel free to open issues and pull requests!