Database Connection:

const mysql = require("mysql");
require("dotenv").config();

let con;

function connectDB() {
  try {
    con = mysql.createConnection({
      host: process.env.DB_HOST || "localhost",
      user: process.env.DB_USER || "root",
      password: process.env.DB_PASSWORD || "",
      database: process.env.DB_NAME || "node_app",
    });

    con.connect((err) => {
      if (err) {
        console.error("MySQL Connection Error:", err);
        process.exit(1);
      }
      console.log("MySQL Connected Successfully");
    });
  } catch (error) {
    console.error("MySQL Connection Error:", error);
    process.exit(1);
  }
}

module.exports = connectDB;
module.exports.getConnection = () => con;

Routes:

const express = require("express");
const router = express.Router();
const { userSignup } = require("../controllers/authController");
// const {
//     listUsers,
//     createUser,
//     updateUser,
//     deleteUser,
// } = require("../controllers/userController");
router.post("/signup", userSignup);
// router.post("/signup", signup);
// router.post("/login", login);
// router.get("/userslist", listUsers);
// router.post("/users", createUser);
// router.put("/users/:id", updateUser);
// router.delete("/users/:id", deleteUser);
module.exports = router;

Controller:

const bcrypt = require("bcryptjs");
const User = require("../models/User");

exports.userSignup = async(req,res)=>{
    try { 
        const { name,email,phone,password } = req.body;
        
        if(!name || !email || !phone || !password) {
            return res.status(400).json({
                message:"Please provide all the required fields",
            });
        }

        User.findByEmail(email, async(err, result) => {
            if(err) {
                return res.status(500).json({
                    message:"Database Error",
                    error: err.message
                });    
            }
            
            if(result.length > 0) {
                return res.status(400).json({
                    message:"User already exists",
                });
            }

            // Hash password
            const hashedPassword = await bcrypt.hash(password, 10);
            
            // Create user
            User.create({name, email, phone, password: hashedPassword}, (err, result) => {
                if(err) {
                    return res.status(500).json({
                        message:"Database Error",
                        error: err.message
                    });    
                }
                
                res.status(201).json({
                    message:"User registered successfully",
                    user: {
                        id: result.insertId,
                        name,
                        email,
                        phone
                    }
                });
            });
        });
    }
    catch (error) {
        console.error("Error in userSignup:", error);
        res.status(500).json({ message: "Internal Server Error" });
    }
};

Model:

const getConnection = require("../config/db").getConnection;

const User = {
  findByEmail: (email, callback) => {
    const con = getConnection();
    const query = "SELECT * FROM users WHERE email = ?";
    con.query(query, [email], callback);
  },
  create: (userData, callback) => {
    const con = getConnection();
    const query = "INSERT INTO users (name, email, phone, password) VALUES (?, ?, ?, ?)";
    const { name, email, phone, password } = userData;
    con.query(query, [name, email, phone, password], callback);
  }

};

module.exports = User;