create-bodhi-node-boilerplate
Version:
Create a Node.js project with basic folder structure and server setup
323 lines (250 loc) ⢠8.15 kB
Markdown
# 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!