How to Set Up an MVC Folder Structure in a Node.js App
- Posted on December 19, 2024
- Technology
- By MmantraTech
- 136 Views
Hey Guys In this Blog I will give you quick walk through for setting up NODE js project in MVC format. More emphsis on practical code that theory.

Folder Structure
server.js file
const express = require("express");
const path = require("path");
const { promisify } = require("util");
const app = express();
if (process.env.NODE_ENV !== "production") {
require("dotenv").config();
}
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.set("views", path.join(__dirname, "app/views"));
app.set("view engine", "ejs");
var flash = require("connect-flash");
//using express-session
app.use(
require("express-session")({
secret: "This is secret",
resave: false,
// cookie :{maxAge : 1000},
saveUninitialized: false,
})
);
app.use(flash());
app.use(function (req, res, next) {
res.locals.message = req.flash();
next();
});
const Users = require("./app/routes/UsersRoute");
app.get("/about",function(req,res){
res.json({msg:'working'})
});
app.use("/register", function (req, res) {
res.render("register");
});
app.use("/api/v1/", Users);
PORT = process.env.PORT || 8085;
app.listen(PORT, function () {
console.log(`Server is listening at port ${PORT}`);
});
app\config\db.js
const mysql = require("mysql");
const connection = mysql.createConnection({
host: process.env.HOST,
user: process.env.USER,
password: process.env.PASSWORD,
database: process.env.DATABASE,
});
connection.connect((err) => {
if (err) {
throw err;
} else {
console.log("Mysql Connected");
}
});
module.exports = connection;
app\controllers\UsersController.js
const { getUsers ,formSubmit,updateEmployee,deleteEmployee} = require("../models/UsersModel");
exports.getUsers = async (req, res) => {
let data = [];
try {
data = await getUsers();
res.render("show",{users:data});
// res.json({ msg: "success", data: data });
} catch (error) {
res.json({ msg: error, data: [] });
}
};
exports.formSubmit = async (req, res) => {
// console.log("r===",req.body);
let data = [];
try {
data = await formSubmit(req.body);
req.flash('success', 'Employee Added Successfully');
// res.locals.message = req.flash();
res.redirect("/api/v1/getUsers")
// res.json({ msg: "success", data: data });
} catch (error) {
res.json({ msg2: error, data: [] });
}
};
exports.updateEmployee = async (req, res) => {
// console.log("r===",req.body);
let data = [];
try {
data = await updateEmployee(req.body);
req.flash('success', 'Employee Updated successfully');
// res.locals.message = req.flash();
res.redirect("/api/v1/getUsers")
// res.json({ msg: "success", data: data });
} catch (error) {
res.json({ msg2: error, data: [] });
}
};
exports.deleteEmployee = async (req, res) => {
// console.log("r===",req.body);
let data = [];
try {
data = await deleteEmployee(req.params.id);
req.flash('success', 'Employee Deleted successfully');
// res.locals.message = req.flash();
res.redirect("/api/v1/getUsers")
// res.json({ msg: "success", data: data });
} catch (error) {
res.json({ msg2: error, data: [] });
}
};
app\models\UsersModel.js
const connection = require("../config/db");
const { promisify } = require("util");
const promise_connection = promisify(connection.query).bind(connection);
exports.getUsers = async () => {
let query = "select * from users";
return await promise_connection(query);
};
exports.formSubmit = async (data) => {
// console.log(data)
let query = "insert into users(name,email,mobile) values(?,?,?)";
return await promise_connection(query,[data.first_name,data.email,data.phone]);
};
exports.updateEmployee = async (data) => {
// console.log(data)
let query = "update users set name=?,email=?,mobile=? where id=?";
return await promise_connection(query,[data.first_name,data.email,data.phone,data.userid]);
};
exports.deleteEmployee = async (id) => {
// console.log(data)
let query = "delete from users where id=?";
return await promise_connection(query,[id]);
};
app\routes\UsersRoute.js
const router = require("express").Router();
const {getUsers,formSubmit,updateEmployee,deleteEmployee} = require("../controllers/UsersController");
router.route("/getUsers").get(getUsers);
router.route("/formSubmit").post(formSubmit);
router.route("/updateEmployee").post(updateEmployee);
router.route("/deleteEmployee/:id").get(deleteEmployee);
module.exports = router;
package.json
{
"name": "nodemysql",
"version": "1.0.0",
"description": "APis in node and mysql",
"main": "server.js",
"scripts": {
"start": "nodemon server.js"
},
"keywords": [
"node",
"mysql"
],
"author": "Tech",
"license": "ISC",
"dependencies": {
"connect-flash": "^0.1.1",
"dotenv": "^16.0.3",
"ejs": "^3.1.8",
"express": "^4.18.2",
"express-session": "^1.17.3",
"mysql": "^2.18.1",
"nodemon": "^2.0.20",
"util": "^0.12.5"
}
}
Write a Response