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.

nodejs-AZNlqLSrys.webp

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"
  }
}
Author
No Image
Admin
MmantraTech

Mmantra Tech is a online platform that provides knowledge (in the form of blog and articles) into a wide range of subjects .

You May Also Like

Write a Response