MongoDB CURD
1. Create a new Node.js project:
mkdir blog_mongodb
cd blog_mongodbnpm init -y //Initialise and Configure Our Project
npm i express mongoose morgan dotenv cors --save
// express install
// mongoose: mongodb install
// morgan: for show log
//cors: cors install
npm i -D nodemon //server restart when some change
2. Edit package.json
{"name": "blog_mongodb",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon server.js"
},
...
When I will write the following command ‘’npm start’’ than ‘’npm nodemon app.js’’ will be run.
3. Project Structure:
project_name
controllers
-HomeController
model
-HomeModel
node_modules
app.js
utils
server.js
package.json
4. app.js
const express = require('express');
const cors = require("cors");
const morgan = require('morgan');
const mongoose = require('mongoose');
const app = express(); //route handaling,controller,templet engine,middleware
app.use(express.urlencoded({extended: true})); // for get form data
app.use(express.json()); //for get json reponse
app.use(cors());
app.use(morgan('dev'));
app.get('/', (req, res) => {
console.log("peyas")
res.send("peyas")
})
//database connection with mongoose(blog create on Run Time)
mongoose.connect('mongodb://localhost:27017/blog', {useNewUrlParser: true, useUnifiedTopology: true})
.then(() => {
console.log("Database connected")
})
.catch(e => {
console.log(e);
});
/* main_route */
const homeController = require('./controllers/HomeController')
/* using as middleware v1 */
app.use('/api/app/v1/blog', homeController);
module.exports = app;
5. server.js
touch server.js
//server.js
const app = require("./app");
const port = process.env.PORT || 4545;
// listen for requests
app.listen(port, () => {
console.log(`Server is listening on port ${port}`);
});
6. Create Mongoose Model:
model
-HomeModel
const { Schema, model } = require('mongoose')//New Schema toiri kori
const userSchema = new Schema({
title:{
type: String,
required: true,
index: true,
trim: true
},
description: {
type: String,
required: true,
trim: true
}
}, { timestamps: true })const user_table = model('user_table',userSchema); //create user_table
module.exports = user_table
7. Create Controller:
controllers
-HomeController
const express = require('express')
const router = express.Router()
const BlogModel = require('../model/Blog')
//GET ALL BLOG
router.get('/', async (req, res) => {
})
//GET SINGLE BLOG
router.get("/getSingleBlog/:id", async (req,res) => {
});
//CREATE BLOG
router.post("/create",async (req,res) => {
});
//UPDATE BLOG
router.put("/update/:id",async (req,res) => {
})
//DELETE BLOG
router.delete("/delete/:id",async (req,res)=> {
})
module.exports = router
CRUD Operation:
const express = require('express')
const router = express.Router()
const BlogModel = require('../model/Blog')
//GET ALL BLOG
router.get('/', async (req, res) => {
try {
const blog = await BlogModel.find();
res.status(200).json({
success: true,
message: 'get All Blog',
data: blog
});
} catch (e) {
res.status(501).json({
"success": false,
"message": "Something went wrong!!",
"data": e.toString()
});
}
})
//GET SINGLE BLOG
router.get("/getSingleBlog/:id", async (req,res) => {
try {
const resData = await BlogModel.findById(req.params.id);
res.status(200).json({
success: true,
message: 'get Single Blog',
data: resData
});
} catch(e) {
res.status(501).json({
"success": false,
"message": "Something went wrong!!",
"data": e.toString()
});
}
});
//CREATE BLOG
router.post("/create",async (req,res) => {
const {title,description} = req.body;
//validation
if (!title || !description) {
res.status(400).json({
"success": false,
"message": "Content can not be empty!!",
"data": ''
});
}
//Create Blog
const user = new BlogModel({
title: req.body.title,
description: req.body.description
});
//Save Blog in the DataBase
await user.save((error,response) => {
if(error) {
res.status(501).json(error.toString());
}
res.status(200).json({
"success": true,
"message": "Blog created successfully!!",
"data": response
});
})
});
//UPDATE BLOG
router.put("/update/:id",async (req,res) => {
BlogModel.findOneAndUpdate({ _id: req.params.id },
{
$set: {
title: req.body.title,
description: req.body.description
},
},
{
new: true, //for get update data in response
userFindAndModify:false
},
(err, response) => {
if (err) {
res.send(err);
} else{
res.json(response);
}
}
);
})
//DELETE BLOG
router.delete("/delete/:id",async (req,res)=> {
BlogModel.deleteOne({ _id: req.params.id },(e,response)=> {
if(e) {
res.status(501).json({
"success": false,
"message": "Something went wrong!!",
"data": e.toString()
});
}
res.status(200).json({
"success": false,
"message": "deleted Successfully!!",
"data": response
});
})
})
//CREATE MULTIPLE
router.post('/create/all', async (req,res) => {
await BlogModel.insertMany(req.body, (err,response)=> {
if(err) {
res.status('501').json(err.toString());
} else {
res.status('200').json("Inserted Successfully.")
}
})
})
module.exports = router
8. Start
npm start
Create:
/api/app/v1/blog/create
Get All:
/api/app/v1/blog
Get Blog By ID:
/api/app/v1/blog/getSingleBlog/62fa1030536d34e59853276a
Update:
/api/app/v1/blog/update/62fa1030536d34e59853276a
Delete:
/api/app/v1/blog/delete/62fa1030536d34e59853276a
Details: