EX.
NO:
SESSION USING NODE.JS
DATE:
AIM:
PROCEDURE:
DEPENDENCIES:
PROJECT STRUTURE:
PROGRAM:
Public/index. html:
<!DOCTYPE html>
<html>
<head>
<title> My Form </title>
<style>
a{
font-size: 40px;
</style>
</head>
<body align='center'>
<a href="./registration.html">Register</a>
<br>
<a href="./login.html">Login</a>
</body>
</html>
Public/ login.html:
<!DOCTYPE html>
<html>
<head>
<title> My Form </title>
<style>
#mylink{
font-size: 25px;
</style>
</head>
<body align='center'>
<header>
<h1>Login</h1>
</header>
<form action="/login" method="POST">
<fieldset>
<label>Email ID</label>
<input type ="email" id = 'email' name="email" placeholder="[email protected]"
required>
<br><br>
<label>Password</label>
<input type="password" id = "password" name="password" required>
<br><br>
<button type ="reset">Reset</button>
<button type ="submit">Submit</button>
</fieldset>
</form>
<br><br>
<a id="mylink" href="./registration.html">register</a>
</body>
</html>
Public/registration.html:
<!DOCTYPE html>
<html>
<head>
<title> My Form </title>
<style>
#mylink{
font-size: 25px;
</style>
</head>
<body align='center'>
<header>
<h1>Register</h1>
</header>
<form action="/register" method="POST">
<fieldset>
<label>Username</label>
<input type ="text" id = 'username' name="username" placeholder="maverick"
required>
<br><br>
<label>Email ID</label>
<input type ="email" id = 'email' name="email" placeholder="[email protected]"
required>
<br><br>
<label>Password</label>
<input type="password" id = "password" name="password" required>
<br><br>
<button type ="reset">Reset</button>
<button type ="submit">Submit</button>
</fieldset>
</form>
<br><br>
<a id="mylink" href="./login.html">login</a>
</body>
</html>
App.js:
const express = require('express');
const http = require('http');
const bcrypt = require('bcrypt');
const path = require("path");
const bodyParser = require('body-parser');
const users = require('./data').userDB;
const app = express();
const server = http.createServer(app);
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname,'./public')));
app.get('/',(req,res) => {
res.sendFile(path.join(__dirname,'./public/index.html'));
});
app.post('/register', async (req, res) => {
try{
let foundUser = users.find((data) => req.body.email === data.email);
if (!foundUser) {
let hashPassword = await bcrypt.hash(req.body.password, 10);
let newUser = {
id: Date.now(),
username: req.body.username,
email: req.body.email,
password: hashPassword,
};
users.push(newUser);
console.log('User list', users);
res.send("<div align ='center'><h2>Registration successful</h2></div><br><br><div
align='center'><a href='./login.html'>login</a></div><br><br><div align='center'><a
href='./registration.html'>Register another user</a></div>");
} else {
res.send("<div align ='center'><h2>Email already used</h2></div><br><br><div align='center'><a
href='./registration.html'>Register again</a></div>");
}
} catch{
res.send("Internal server error");
});
app.post('/login', async (req, res) => {
try{
let foundUser = users.find((data) => req.body.email === data.email);
if (foundUser) {
let submittedPass = req.body.password;
let storedPass = foundUser.password;
const passwordMatch = await bcrypt.compare(submittedPass, storedPass);
if (passwordMatch) {
let usrname = foundUser.username;
res.send(`<div align ='center'><h2>login successful</h2></div><br><br><br><div align
='center'><h3>Hello ${usrname}</h3></div><br><br><div align='center'><a href='./login.html'>logout</a>
</div>`);
} else {
res.send("<div align ='center'><h2>Invalid email or password</h2></div><br><br><div align
='center'><a href='./login.html'>login again</a></div>");
else {
let fakePass = `$2b$$10$ifgfgfgfgfgfgfggfgfgfggggfgfgfga`;
await bcrypt.compare(req.body.password, fakePass);
res.send("<div align ='center'><h2>Invalid email or password</h2></div><br><br><div
align='center'><a href='./login.html'>login again<a><div>");
} catch{
res.send("Internal server error");
}
});
server.listen(3000, function(){
console.log("server is listening on port: 3000");
});
Data.js:
const userDB = [];
module.exports = { userDB };
OUTPUT:
RESULT:
EX.NO:
SESSION USING NODE.JS AND MONGODB
DATE:
AIM:
PROCEDURE:
DEPENDENCIES:
PROJECT STRUCTURE:
PROGRAM:
Models/user.js:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
userSchema = new Schema( {
unique_id: Number,
email: String,
username: String,
password: String,
passwordConf: String
}),
User = mongoose.model('User', userSchema);
module.exports = User;
Routes/index.js:
var express = require('express');
var router = express.Router();
var User = require('../models/user');
router.get('/', function (req, res, next) {
return res.render('index.ejs');
});
router.post('/', function(req, res, next) {
console.log(req.body);
var personInfo = req.body;
if(!personInfo.email || !personInfo.username || !personInfo.password || !personInfo.passwordConf)
{
res.send();
} else {
if (personInfo.password == personInfo.passwordConf) {
User.findOne({email:personInfo.email},function(err,data){
if(!data){
var c;
User.findOne({},function(err,data){
if (data) {
console.log("if");
c = data.unique_id + 1;
}else{
c=1;
var newPerson = new User({
unique_id:c,
email:personInfo.email,
username: personInfo.username,
password: personInfo.password,
passwordConf: personInfo.passwordConf
});
newPerson.save(function(err, Person){
if(err)
console.log(err);
else
console.log('Success');
});
}).sort({_id: -1}).limit(1);
res.send({"Success":"You are regestered,You can login now."});
}else{
res.send({"Success":"Email is already used."});
});
}else{
res.send({"Success":"password is not matched"});
});
router.get('/login', function (req, res, next) {
return res.render('login.ejs');
});
router.post('/login', function (req, res, next) {
//console.log(req.body);
User.findOne({email:req.body.email},function(err,data){
if(data){
if(data.password==req.body.password){
//console.log("Done Login");
req.session.userId = data.unique_id;
//console.log(req.session.userId);
res.send({"Success":"Success!"});
}else{
res.send({"Success":"Wrong password!"});
}else{
res.send({"Success":"This Email Is not regestered!"});
});
});
router.get('/profile', function (req, res, next) {
console.log("profile");
User.findOne({unique_id:req.session.userId},function(err,data){
console.log("data");
console.log(data);
if(!data){
res.redirect('/');
}else{
//console.log("found");
return res.render('data.ejs', {"name":data.username,"email":data.email});
});
});
router.get('/logout', function (req, res, next) {
console.log("logout")
if (req.session) {
// delete session object
req.session.destroy(function (err) {
if (err) {
return next(err);
} else {
return res.redirect('/');
});
});
router.get('/forgetpass', function (req, res, next) {
res.render("forget.ejs");
});
router.post('/forgetpass', function (req, res, next) {
//console.log('req.body');
//console.log(req.body);
User.findOne({email:req.body.email},function(err,data){
console.log(data);
if(!data){
res.send({"Success":"This Email Is not regestered!"});
}else{
// res.send({"Success":"Success!"});
if (req.body.password==req.body.passwordConf) {
data.password=req.body.password;
data.passwordConf=req.body.passwordConf;
data.save(function(err, Person){
if(err)
console.log(err);
else
console.log('Success');
res.send({"Success":"Password changed!"});
});
}else{
res.send({"Success":"Password does not matched! Both Password should be same."});
});
});
module.exports = router;
Views/css/main.css:
body{
text-align: center !important;
p{
margin-top: 20px;
font-size: 30px;
input{
text-align: center;
.mssg{
margin-top: 5px;
margin-bottom: 5px;
border-radius: 5px;
Views/data.ejs:
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="./css/main.css">
</head>
<body>
<div class="col-md-4 col-md-offset-4">
<div>
<p>Profile Detail</p>
</div>
<div>
<center>
<table class="table table-hover text-center">
<tr><td>Name </td><td><%= name %></td></tr>
<tr><td>Email </td><td><%= email %></td></tr>
</table>
</center>
</div>
<div class="abc">
<a href="/logout">Logout</a>
</div>
</div>
</body>
</html>
Views/index.ejs:
<!DOCTYPE html>
<html>
<head>
<title>Registration</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="./css/main.css">
<script type="text/javascript">
$(document).ready(function(){
$( "#form1" ).submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: '/',
data: $('#form1').serialize(),
dataType: "json",
success: function(response){
//alert("a");
//console.log(response.Success);
$('#form1')[0].reset();
document.getElementById("check").innerHTML=response.Success;
//ADD THIS CODE
setTimeout(function(){
document.getElementById("check").innerHTML="";
},3000);
if (response.Success=="You are regestered,You can login now.") {
document.getElementById("aa").click();
};
},
error: function() {
})
});
});
</script>
</head>
<body>
<div class="col-md-4 col-md-offset-4">
<div>
<p>Register Now
</p>
</div>
<div class="form-group">
<form id="form1" method="post">
<input type="email" name="email" placeholder="E-mail" required=""
class="form-control"><br/>
<input type="text" name="username" placeholder="Username" required=""
class="form-control"><br/>
<input type="password" name="password" placeholder="Password"
required="" class="form-control"><br/>
<input type="password" name="passwordConf" placeholder="Confirm
Password" required="" class="form-control"><br/>
<input type="submit" value="Register" class="btn btn-success">
</form>
</div>
<div class="mssg bg-danger">
<span id="check"></span>
</div>
<div>
<span>Already Registered! <a href="/login">Login</a></span>
</div>
<div id="LangTable"><a href="/login" id="aa"></a>
</div>
</div>
</body>
</html>
Views/login.ejs:
<!DOCTYPE html>
<html>
<head>
<title>Registration</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="./css/main.css">
<script type="text/javascript">
$(document).ready(function(){
$( "#form1" ).submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: '/',
data: $('#form1').serialize(),
dataType: "json",
success: function(response){
//alert("a");
//console.log(response.Success);
$('#form1')[0].reset();
document.getElementById("check").innerHTML=response.Success;
//ADD THIS CODE
setTimeout(function(){
document.getElementById("check").innerHTML="";
},3000);
if (response.Success=="You are regestered,You can login now.") {
document.getElementById("aa").click();
};
},
error: function() {
})
});
});
</script>
</head>
<body>
<div class="col-md-4 col-md-offset-4">
<div>
<p>Register Now
</p>
</div>
<div class="form-group">
<form id="form1" method="post">
<input type="email" name="email" placeholder="E-mail" required=""
class="form-control"><br/>
<input type="text" name="username" placeholder="Username" required=""
class="form-control"><br/>
<input type="password" name="password" placeholder="Password"
required="" class="form-control"><br/>
<input type="password" name="passwordConf" placeholder="Confirm
Password" required="" class="form-control"><br/>
<input type="submit" value="Register" class="btn btn-success">
</form>
</div>
<div class="mssg bg-danger">
<span id="check"></span>
</div>
<div>
<span>Already Registered! <a href="/login">Login</a></span>
</div>
<div id="LangTable"><a href="/login" id="aa"></a>
</div>
</div>
</body>
</html>
Views/forget.ejs:
<!DOCTYPE html>
<html>
<head>
<title>Forget Password</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="./css/main.css">
<script type="text/javascript">
$(document).ready(function(){
$( "#form2" ).submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: '/forgetpass',
data: $('#form2').serialize(),
dataType: "json",
success: function(response){
//alert("a");
//console.log(response.Success);
$('#form2')[0].reset();
//alert("abc");
document.getElementById("check").innerHTML=response.Success;
setTimeout(function(){
document.getElementById("check").innerHTML="";
},3000);
if (response.Success=="Password changed!") {
document.getElementById("aa").click();
};
},
error: function() {
})
});
});
</script>
</head>
<body>
<div class="col-md-4 col-md-offset-4">
<div>
<p>Change Password</p>
</div>
<div class="form-group">
<form id="form2" method="post">
<input type="text" name="email" placeholder="E-mail" required="" class="form-
control"><br/>
<input type="password" name="password" placeholder="Password" required=""
class="form-control"><br/>
<input type="password" name="passwordConf" placeholder="Confirm Password"
required="" class="form-control"><br/>
<input type="submit" value="Change" class="btn btn-success">
</form>
</div>
<div class="mssg bg-danger">
<span id="check"></span>
</div>
<div id="LangTable"><a href="/profile" id="aa"></a>
</div>
<div><span>Login?</span><a href="/login">Click here</a></div>
</div>
<div id="LangTable"><a href="/login" id="aa"></a>
</div>
</div>
</body>
</html>
Server.js:
var express = require('express');
var env = require('dotenv').config()
var ejs = require('ejs');
var path = require('path');
var app = express();
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
mongoose.connect('mongodb://127.0.0.1:27017/lo', {
useNewUrlParser: true,
useUnifiedTopology: true
}, (err) => {
if (!err) {
console.log('MongoDB Connection Succeeded.');
} else {
console.log('Error in DB connection : ' + err);
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
});
app.use(session({
secret: 'work hard',
resave: true,
saveUninitialized: false,
store: new MongoStore({
mongooseConnection: db
})
}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(__dirname + '/views'));
var index = require('./routes/index');
app.use('/', index);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
var err = new Error('File Not Found');
err.status = 404;
next(err);
});
// error handler
// define as the last app.use callback
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.send(err.message);
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, function () {
console.log('Server is started on http://127.0.0.1:'+PORT);
});
OUTPUT:
RESULT: