https://github.com/manuelalejandrojimeneztorres/surveyhub-server
RESTful API built with Node.js, Express.js, Sequelize, and MySQL. Provides secure data management, JWT-based authentication, role-based access control, and seamless integration with SurveyHub applications.
https://github.com/manuelalejandrojimeneztorres/surveyhub-server
expressjs jwt mysql nodejs restful-api sequelize
Last synced: 3 months ago
JSON representation
RESTful API built with Node.js, Express.js, Sequelize, and MySQL. Provides secure data management, JWT-based authentication, role-based access control, and seamless integration with SurveyHub applications.
- Host: GitHub
- URL: https://github.com/manuelalejandrojimeneztorres/surveyhub-server
- Owner: manuelalejandrojimeneztorres
- License: apache-2.0
- Created: 2024-12-17T16:00:48.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-22T18:36:11.000Z (over 1 year ago)
- Last Synced: 2025-05-21T04:09:20.395Z (about 1 year ago)
- Topics: expressjs, jwt, mysql, nodejs, restful-api, sequelize
- Language: JavaScript
- Homepage:
- Size: 196 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# SurveyHub Backend (Server)









## Description
The **SurveyHub Backend** is a robust, scalable, and enterprise-grade server-side application designed to support comprehensive online survey management. Built using **Node.js** and **Express.js**, this backend implements a secure, efficient, and extensible RESTful API that integrates seamlessly with the **SurveyHub Mobile Application** and **MySQL database**. It serves as the central hub for managing survey data, enforcing business logic, and ensuring secure user interactions.
---
## Table of Contents
1. [Key Features](#key-features)
2. [Architecture Overview](#architecture-overview)
3. [Prerequisites](#prerequisites)
4. [Installation](#installation)
- [Project Setup](#project-setup)
- [Environment Configuration](#environment-configuration)
- [Database Setup](#database-setup)
- [Start the Server](#start-the-server)
5. [Technologies and Tools Used](#technologies-and-tools-used)
6. [Dependencies](#dependencies)
7. [Troubleshooting](#troubleshooting)
8. [Contributing Guidelines](#contributing-guidelines)
9. [Support](#support)
10. [License](#license)
11. [Acknowledgments](#acknowledgments)
---
## Key Features
- **RESTful API**: Robust endpoints for managing surveys, users, and roles.
- **Role-Based Access Control (RBAC)**: Granular permissions based on user roles (System Administrator, Survey Manager, and Respondent).
- **Authentication**: Secure user authentication using **JWT**.
- **Data Validation**: Comprehensive validation for data integrity and consistency.
- **Scalability**: Designed for horizontal and vertical scaling.
- **File Uploads**: Secure profile picture uploads using **Multer**.
- **Database Management**: Seamless integration with **MySQL**, leveraging **Sequelize ORM**.
[🔼 Back to Top](#table-of-contents)
---
## Architecture Overview
The SurveyHub Backend follows a modular architecture, ensuring maintainability and scalability. Key components include:
- **Layered Architecture**: Combines the **Model-View-Controller (MVC)** pattern with middleware to ensure modularity, maintainability, and scalability.
- **Database Integration**: Utilizes **Sequelize ORM** for robust schema definitions, efficient data operations, and relationship management.
- **API Layer**: Provides secure endpoints for CRUD operations, user authentication, and data processing.
- **Security Measures**: Implements JWT-based authentication, BCrypt for password hashing, and CORS for cross-origin requests.
- **File Management**: Handles multipart form data using Multer for secure profile picture uploads.
[🔼 Back to Top](#table-of-contents)
---
## Prerequisites
Ensure the following tools are installed:
- [Git](https://git-scm.com/downloads) - Version control system
- [Node.js (20.17.0)](https://nodejs.org/) - JavaScript runtime
- [npm (10.9.0)](https://www.npmjs.com/) - Package manager
- [MySQL (8.x)](https://dev.mysql.com/downloads/) - Relational database management system
- **Optional**:
- [Postman](https://www.postman.com/) - API testing tool
[🔼 Back to Top](#table-of-contents)
---
## Installation
### Project Setup
1. Clone the repository:
```bash
git clone https://github.com/manuelalejandrojimeneztorres/surveyhub-server.git
```
2. Navigate to the project directory:
```bash
cd surveyhub-server
```
3. Install the dependencies:
```bash
npm install
```
[🔼 Back to Top](#table-of-contents)
### Environment Configuration
1. Create a `.env` file in the root directory and define the following variables:
```env
JWT_SECRET=YourStrongJWTSecret
MYSQL_DATABASE=surveyhub
MYSQL_USER=root
MYSQL_PASSWORD=YourStrongDatabasePassword
MYSQL_ROOT_PASSWORD=YourStrongDatabasePassword
DB_HOST=localhost
NODE_ENV=development
```
[🔼 Back to Top](#table-of-contents)
### Database Setup
1. Start your MySQL server and create the database:
```sql
CREATE DATABASE surveyhub;
```
2. Run Sequelize migrations to set up the database schema:
```bash
npx sequelize-cli db:migrate
```
[🔼 Back to Top](#table-of-contents)
### Start the Server
1. Launch the server:
```bash
node app.js
```
> [!NOTE]
> The backend will be accessible at `http://localhost:8080`.
[🔼 Back to Top](#table-of-contents)
---
## Technologies and Tools Used
- **Backend**:
- Node.js: High-performance JavaScript runtime
- Express.js: Minimalist web framework
- Sequelize: Database ORM
- MySQL: Relational database
- **Security**:
- bcryptjs: Password hashing
- jsonwebtoken: Authentication
- cors: Cross-origin request handling
- **Development Tools**:
- Postman: API testing
- Visual Studio Code: Code editor
- MySQL Workbench: Database management
[🔼 Back to Top](#table-of-contents)
---
## Dependencies
Key dependencies include:
- `express` (4.21.0): Web framework
- `sequelize` (6.37.4): ORM for MySQL
- `mysql2` (3.11.3): MySQL client
- `jsonwebtoken` (9.0.2): Token-based authentication
- `bcryptjs` (2.4.3): Password encryption
- `dotenv` (16.4.5): Environment variable management
- `multer` (1.4.5-lts.1): File uploads
> [!NOTE]
> For a full list, see the `package.json` file.
[🔼 Back to Top](#table-of-contents)
---
## Troubleshooting
### Common Issues
- **Database Connection Errors**:
- Ensure MySQL is running and credentials in the `.env` file are correct.
- Check if the database exists and migrations have been executed.
- **Missing Dependencies**:
- Run `npm install` to ensure all required packages are installed.
- **Server Not Starting**:
- Check the logs for detailed error messages.
### Logs
Use the following command to view logs:
```bash
npm run logs
```
[🔼 Back to Top](#table-of-contents)
---
## Contributing Guidelines
We welcome contributions to improve the SurveyHub Backend. To contribute:
1. Fork the repository.
2. Create a new branch for your feature or bug fix:
```bash
git checkout -b feature/your-feature-name
```
3. Commit your changes with detailed messages:
```bash
git commit -m "Add: Description of your feature"
```
4. Push your branch and open a pull request.
> [!NOTE]
> For guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
[🔼 Back to Top](#table-of-contents)
---
## Support
For support, contact:
- **Email**: support@surveyhub.com
- **Documentation**: [SurveyHub API Wiki](https://github.com/manuelalejandrojimeneztorres/surveyhub-server/wiki)
[🔼 Back to Top](#table-of-contents)
---
## License
This project is licensed under the **Apache License 2.0**. See the [LICENSE.txt](LICENSE.txt) file for more details.
[🔼 Back to Top](#table-of-contents)
---
## Acknowledgments
Special thanks to:
- The [Node.js](https://nodejs.org/) and [Express.js](https://expressjs.com/) communities for exceptional frameworks.
- [Sequelize](https://sequelize.org/) for simplifying database operations.
- [GitHub](https://github.com/) for enabling collaboration and version control.
[🔼 Back to Top](#table-of-contents)
---
For more information, visit [SurveyHub Mobile](https://github.com/manuelalejandrojimeneztorres/surveyhub-mobile) or [SurveyHub Desktop](https://github.com/manuelalejandrojimeneztorres/surveyhub-desktop).
Enjoy using the **SurveyHub Backend** and feel free to contribute to its development! 🚀
[🔼 Back to Top](#table-of-contents)