Srmap Batch 1 Mern Temp Notes
Srmap Batch 1 Mern Temp Notes
================================================================
Reading Express Post parameters
================================================================
Download express and body-parser modules
//initialise project
//>npm init -y
//Download express and body-parser modules
//>yarn add express body-parser --save
//import modules
let express = require('express')
let bodyparser = require('body-parser')
//create rest object
let app = express()
//create port
let port = 8080
//set JSON as MIME type
app.use(bodyparser.json())
//front end encoding form data as json
app.use(bodyparser.urlencoded({ extended: false }))
//create rest api
app.post("/login",(req,res)=>{
//client parameters are stored in body part of req
let uname = req.body.uname
let upwd = req.body.upwd
if (uname == 'admin' && upwd == 'admin')
res.send({ 'login': "success" })
else
res.send({ 'login': 'failed' })
})
//assign port no
app.listen(port, () => {
console.log('Server listening port no ', port)
})
/*
Start server
>node server
Test Rest api in postman with url
http://localhost:8080/login
in postman
1. req -> post
body -> raw
-> text <-> json
{"uname":"admin","upwd":"admin"}
================================================================
Reading url parameters from express
================================================================
//initilayse project
//>npm init -y
//download express module
//>yarn add express --save
//import express module
let express = require('express')
//create rest object
let app = express()
//create port
let port = 8080
//url:http://localhost:8080/login/admin/admin
app.get("/login/:uname/:upwd", (req, res) => {
//params is the predefined key from req object used to read prameters from
url
let uname = req.params.uname
let upwd = req.params.upwd
console.log("req.params", req.params)
if (uname === 'admin' && upwd === 'admin')
res.json({ 'login': 'success' })
else
res.json({ 'login': 'failed' })
})
//assign port no
app.listen(port, () => {
console.log(`Server listening port no ${port}`)
})
================================================================
Modules in Express
================================================================
<>
login
- login.js
logout
- logout.js
- server.js
//initialyse project
//>npm init -y
//download express module
//>yarn add express --save
***login.js***
//import express module
let express = require('express')
//create router instance
let router = express.Router()
//create get request
router.get("/", (req, res) => {
res.json({ 'message': 'Welcome to login module' })
})
//create one more get request
router.get("/login/:uname/:upwd", (req, res) => {
//here we are reading url parameters using params
let uname = req.params.uname
let upwd = req.params.upwd
if (uname === 'admin' && upwd === 'admin')
res.json({ 'login': 'success' })
else
res.json({ 'login': 'failed' })
})
//export router
module.exports = router
***logout.js***
//import express module
let express = require('express')
//create router instance
let router = express.Router()
//create get request
router.get("/", (req, res) => {
res.json({ 'message': 'Welcome to logout module' })
})
//create one more get request
//URL :- http://localhost:8080/logout/logout/?uname=admin&upwd=admin
router.get("/logout", (req, res) => {
//here we are reading get parameters using query
let uname = req.query.uname
let upwd = req.query.upwd
if (uname === 'admin' && upwd === 'admin')
res.send({ 'logout': 'success' })
else
res.send({ 'logout': 'failed' })
})
//export router
module.exports = router
***server.js***
//import modules
let express = require('express')
let login = require('./login/login')
let logout = require('./logout/logout')
//create rest object
let app = express()
//use modules
app.use("/login", login)
app.use("/logout", logout)
app.listen(8080)
console.log('Server listening port no 8080')
/*
http://localhost:8080/login
http://localhost:8080/login/login/admin/admin
http://localhost:8080/logout
http://localhost:8080/logout/logout?uname=admin&upwd=admin
*/
================================================================
Imports and exports
================================================================
- module is the predefined object in node.
- exports is the predefined key in module object.
- exports key is used to export (JSON object or function)
***db_config.js***
module.exports = {
"host": "localhost",
"user": "root",
"password": "root",
"database": "nodedb",
"table": "products"
}
***server.js***
//initialyse project
//>npm init -y
//download express module
//>yarn add express --save
//import express module
let express = require('express')
//create rest object
let app = express()
//create port
let port = 8080
//import db_config
let obj = require("./config/db_config")
//create rest api
app.get("/", (req, res) => {
res.json(obj)
})
//assign port no
app.listen(port, () => {
console.log(`Server listening port no ${port}`)
})
***server.js***
//initialyse project
//>npm init -y
//download express module
//>yarn add express --save
//import express module
let express = require('express')
//create rest object
let app = express()
//import my_fun
let my_fun = require('./config/my_fun')
//create rest api
app.get("/login", (req, res) => {
let uname = req.query.uname
let upwd = req.query.upwd
res.send(my_fun(uname, upwd))
})
//assign port no
app.listen(8080)
console.log("Server listening port no 8080")
//url :- http://localhost:8080/login/?uname=admin&upwd=admin
================================================================
Middlewares
================================================================
- Middlewares execute before routing in ReST api
- An Express application can use the following types of middleware:
- - Application-level middleware
- - Router-level middleware
- - Error-handling middleware
- - Built-in middleware
- - Third-party middleware
Application-level middleware
- Bind application-level middleware to an instance of the app object
by using the app.use() and app.METHOD() functions, where METHOD is
the HTTP method of the request that the middleware function handles
Router-level middleware
- Router-level middleware works in the same way as application-level
middleware, except it is bound to an instance of express.Router().
Error-handling middleware
- Define error-handling middleware functions in the same way as
other middleware functions, except with four arguments instead of
three, specifically with the signature (err, req, res, next))
Built-in middleware
- Express has the following built-in middleware functions:
- express.static: serves static assets such as HTML files, images, and
so on.
- express.json: parses incoming requests with JSON payloads.
NOTE: Available with Express 4.16.0+
- express.urlencoded: parses incoming requests with URL-encoded
payloads. NOTE: Available with Express 4.16.0+
Third-party middleware
- Use third-party middleware to add functionality to Express apps.
- Install the Node.js module for the required functionality, then load
it in your app at the application level or at the router level.
==============================================================
Type of databases
==============================================================
SQL Structured Query Language
NoSQL Not Structured Query Language
==============================================================
Interaction with MongoDB
==============================================================
<>
fetch
- fetch.js
insert
- insert.js
update
- update.js
delete
- delete.js
- server.js
- url.js
initialise project
>npm init
download modules
express
[email protected]
body-parser
cors
***url.js***
module.exports = `mongodb://localhost:27017`
//module.exports = "mongodb+srv://admin:[email protected]/"
***fetch.js***
//import modules
const express = require('express')
let mongodb = require('mongodb')
//import url
const url = require('../url')
//create mongo client
let mcl = mongodb.MongoClient
//create router instance
let router = express.Router()
//create rest api
router.get("/", (req, res) => {
//connect to mongodb
mcl.connect(url, (err, conn) => {
if (err)
console.log('Error in connection')
else {
let db = conn.db('nodedb')
db.collection('products').find().toArray((err, array) => {
if (err)
console.log('Error:- ', err)
else {
console.log('Data Sent')
res.json(array)
conn.close()
}
})
}
})
})
//export router
module.exports = router
***insert.js***
//import modules
const express = require('express')
let mongodb = require('mongodb')
//import url
const url = require('../url')
//create mongo client
let mcl = mongodb.MongoClient
//create router instance
let router = express.Router()
//create rest api
router.post("/", (req, res) => {
let obj = req.body
//connect to mongodb
mcl.connect(url, (err, conn) => {
if (err)
console.log('Error in connection :- ', err)
else {
let db = conn.db('nodedb')
db.collection('products').insertOne(obj, (err) => {
if (err)
res.json({ 'insert': 'Error ' + err })
else {
console.log("Data inserted")
res.json({ 'insert': 'success' })
conn.close()
}
})
}
})
})
//export router
module.exports = router
***update.js***
//import modules
const express = require('express')
let mongodb = require('mongodb')
//import url
const url = require('../url')
//create mongo client
let mcl = mongodb.MongoClient
//create router instance
let router = express.Router()
//create rest api
router.put("/", (req, res) => {
let p_id = req.body.p_id
let obj = {
p_name: req.body.p_name,
p_cost: req.body.p_costs
}
//connect to mongodb
mcl.connect(url, (err, conn) => {
if (err)
console.log('Error in connection :- ', err)
else {
let db = conn.db('nodedb')
db.collection('products').updateOne({ p_id }, { $set: obj }, (err,
result) => {
if (err)
res.json({ 'update': 'Error ' + err })
else{
if (result.matchedCount != 0) {
console.log("Data updated ")
res.json({ 'update': 'success' })
} else {
console.log("Data Not updated ")
res.json({ 'update': 'Record Not found' })
}
conn.close()
}
})
}
})
})
//export router
module.exports = router
***delete.js***
//import modules
const express = require('express')
let mongodb = require('mongodb')
//import url
const url = require('../url')
//create mongo client
let mcl = mongodb.MongoClient
//create router instance
let router = express.Router()
//create rest api
router.delete("/", (req, res) => {
let obj = {
"p_id": req.body.p_id
}
//connect to mongodb
mcl.connect(url, (err, conn) => {
if (err)
console.log('Error in connection:- ', err)
else {
let db = conn.db("nodedb")
db.collection('products').deleteOne(obj, (err, result) => {
if (err)
res.json({ 'delete': 'Error ' + err })
else {
if (result.deletedCount != 0) {
console.log("Data deleted ")
res.json({ 'delete': 'success' })
} else {
console.log("Data Not deleted ")
res.json({ 'delete': 'Record Not found' })
}
conn.close()
}
})
}
})
})
//export router
module.exports = router
***server.js***
//import modules express body-parser cors
let express = require('express')
let bodyparser = require('body-parser')
let cors = require('cors')
//create rest object
let app = express()
//set JSON as MIME type
app.use(bodyparser.json())
//client is not sending form data -> encoding JSON
app.use(bodyparser.urlencoded({ extended: false }))
//enable CORS -> Cross Origine Resource Sharing -> communication among various
ports
app.use(cors())
//create port
let port = process.env.PORT || 8080
//import fetch insert update delete modules
let fetch = require('./fetch/fetch')
let insert = require('./insert/insert')
let update = require('./update/update')
let remov = require('./delete/delete')
//use above modules
app.use("/fetch", fetch)
app.use("/insert", insert)
app.use("/update", update)
app.use("/delete", remov)
//assign port no
app.listen(port, () => {
console.log("Server listening port no:- ", port)
})
/*
>node server
Test following URLs with postman
http://localhost:8080/fetch (get)
http://localhost:8080/insert (post)
http://localhost:8080/update (put)
http://localhost:8080/delete (delete)
body -> raw -> json
*/
================================================================
Token Based authentication system
================================================================
Step 1:-
Create database for authentication system
>use nodedb;
>db.createCollection(“users”)
>db.users.insert({“uname”:”admin”,”upwd”:”admin”})
>db.users.find()
Step 2 :-
Create following directory structure
<>
token
- token.js -> to generate token
login
- login.js -> implement login module
- server.js
Setp 3:-
initialise project and download modules
Download following modules
1)express -> create ReST api
2)[email protected] -> interact with mongo database
3)body-parser -> post parameters from express / set
MIME type
4)jwt-simple -> for generating tokens
>npm init -y
>yarn add express [email protected] body-parser jwt-simple --save
***url.js***
module.exports = `mongodb://localhost:27017`
***token.js***
//import jwt-simple
let jwt = require("jwt-simple")
module.exports = (obj, enc_key) => {
return jwt.encode(obj, enc_key)
}
***login.js***
//import token
let token = require('../token/token')
//import modules
const express = require('express')
let mongodb = require('mongodb')
//import url
const url = require('../url')
//create mongo client
let mcl = mongodb.MongoClient
//create router instance
let router = express.Router()
//create rest api
router.post("/", (req, res) => {
//connect to mongodb
let obj = req.body
mcl.connect(url, (err, conn) => {
if (err)
console.log('Error in connection')
else {
let db = conn.db('nodedb')
db.collection('users').find(obj).toArray((err, array) => {
if (err)
console.log('Error:- ', err)
else {
if (array.length > 0) {
console.log('Auth Success')
let myToken = token(obj, new Date().toString())
res.json({ 'auth': 'success', token: myToken })
}
else {
console.log('Auth Failed')
res.json({ 'auth': 'falied'})
}
conn.close()
}
})
}
})
})
//export router
module.exports = router
***server.js***
//import modules
let express = require('express')
let bodyparser = require('body-parser')
//create rest object
let app = express()
//set JSON as MIME type
app.use(bodyparser.json())
//client encoding form data to json
app.use(bodyparser.urlencoded({ 'extended': 'false' }))
//import login module
let login = require('./login/login')
//use login module
app.use("/login", login)
//assign port no
app.listen(8080)
console.log('Server listening port no 8080')
/*
>node server
http://localhost:8080/login
POST
body -> raw -> JSON
*/
================================================================
Mongoose
================================================================
- Mongoose is an object document modelling (ODM) that sits on top
of Node's MongoDB driver.
- It's similar to an ORM for a relational database.
- first stable version 1.0.1 02-02-2011
***url.js****
module.exports = `mongodb://localhost:27017`
in server.js
connect to mongodb as
mongoose.connect
***server.js***
//import modules
const express = require('express')
const bodyparser = require('body-parser')
const cors = require('cors')
const mongoose = require('mongoose')
//import url
let url = require('./url')
//create rest object
let app = express()
//set JSON as MIME type
app.use(bodyparser.json())
//client is not sending form data -> encoding JSON
app.use(bodyparser.urlencoded({ extended: false }))
//enable CORS -> Cross Origine Resource Sharing -> communication among various
ports
app.use(cors())
//connect to mongodb
mongoose.connect(url, { dbName: "newDb" })
.then(() => {
console.log('Connection Success')
}, (errRes) => {
console.log("Connection faild:- ", errRes)
})
//create port
let port = 8080
//assign port no
app.listen(port, () => {
console.log('Server listening port no:- ', port)
})
Create apis
apis/productApis.js
***productApis.js***
//import db schema
const Product = require('../model/Product')
//get all products
const products_all = async (req, res) => {
try {
const products = await Product.find()
console.log('Data sent')
res.json(products)
}
catch (error) {
console.log('Fetch error :- ', error)
res.json({ 'message': error })
}
}
module.exports = {
products_all
}
Define routes in
routes/productRoutes.js
***productRoutes.js***
//import express module
const express = require('express')
//create router instance
const router = express.Router()
//import productApi
const productApi = require('../apis/productApis')
//fetch all records
router.get("/fetch", productApi.products_all)
//export router
module.exports = router
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
now update remaining files
***productApis.js***
//import db schema
const Product = require('../model/Product')
//get all products
const products_all = async (req, res) => {
try {
const products = await Product.find()
console.log('Data sent')
res.json(products)
}
catch (error) {
console.log('Fetch error :- ', error)
res.json({ 'message': error })
}
}
//insert a product
const insert_product = async (req, res) => {
const product = new Product({
p_id: req.body.p_id,
p_name: req.body.p_name,
p_cost: req.body.p_cost
})
try {
const savedProduct = await product.save()
console.log('Product inserted')
res.send(savedProduct)
}
catch (error) {
res.status(400).send(error)
}
}
//update product
const update_product = async (req, res) => {
let p_id = req.body.p_id
const product = {
p_name: req.body.p_name,
p_cost: req.body.p_cost
}
try {
const updateProduct = await Product.updateOne(
{ p_id }, product
)
if (updateProduct.modifiedCount != 0) {
console.log('Product Updated', updateProduct)
res.send({ 'update': 'success' })
}
else {
console.log('Product not updated')
res.send({ 'update': 'Record Not Found' })
}
}
catch (error) {
res.status(400).send(error)
}
}
//delete product
const delete_product = async (req, res) => {
let p_id = req.body.p_id
try {
const deletedproduct = await Product.deleteOne({ p_id })
if (deletedproduct.deletedCount != 0) {
console.log('Product Deleted')
res.send({ 'delete': 'success' })
}
else {
console.log('Product Not deleted')
res.send({ 'delete': 'Record Not Found' })
}
}
catch (error) {
res.status(400).send(error)
}
}
module.exports = {
products_all,
insert_product,
update_product,
delete_product
}
***prodctRoutes.js***
//import express module
const express = require('express')
//create router instance
const router = express.Router()
//import productApi
const productApi = require('../apis/productApis')
//fetch all records
router.get("/fetch", productApi.products_all)
//insert a record
router.post("/insert", productApi.insert_product)
//update a record
router.put("/update", productApi.update_product)
//delete a record
router.delete("/delete", productApi.delete_product)
//export router
module.exports = router