How to make signup api in node js
Make sign up Api in node js
First we have to make user model
Create Models folder then Create user.model.js file
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("users", {
UserId: {
type: Sequelize.INTEGER(20),
autoIncrement: true,
primaryKey: true
},
FirstName: {
type: Sequelize.INTEGER(20),
},
LastName: {
type: Sequelize.STRING
},
Email: {
type: Sequelize.STRING
},
});
Password : {
type: Sequelize.STRING
},
});
return User;
};
After that created model we have need to register model in index file . we have to create index.js file in models folder.
///// index.js //////////
const dbConfig = require("../config/db.config.js");
// const Sequelize = require("sequelize");
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
host: dbConfig.HOST,
dialect: dbConfig.dialect,
operatorsAliases: false,
logging: false,
pool: {
max: dbConfig.pool.max,
min: dbConfig.pool.min,
acquire: dbConfig.pool.acquire,
idle: dbConfig.pool.idle
}
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.user = require("../models/user.model.js")(sequelize, Sequelize);
module.exports = db;
Ater that resisted the model in index.js then create a providers folder then create a user.provder.js
///// user.provider.js //////
const db = require("../models");
const envConfig = require("../config/env.config");
const User = db.user;
const UserOtp = db.userOtp;
const Role = db.role;
const Op = db.Sequelize.Op;
var jwt = require("jsonwebtoken");
var bcrypt = require("bcryptjs");
const { check, validationResult } = require("express-validator");
const apiHelper = require("../helpers/apiHelper")
var otpGenerator = require('otp-generator');
const Sequelize = require("sequelize");
var Handlebars = require('handlebars');
//===================For Signup Here=============
exports.signup = (req, res) => {
// Save User to Database
User.create({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
phone: req.body.phone,
password: bcrypt.hashSync(req.body.password, 8)
})
.then(user => {
apiHelper.successError(res,200,"User was registered successfully!",user);
})
.catch(err => {
apiHelper.successError(res,500,err.message,err);
});
};
//===================For Login Here=============
exports.signin = (req, res) => {
User.findOne({
where: {
[Sequelize.Op.or]: [{phone: req.body.email}, {email: req.body.email}]
}
})
.then(user => {
if (!user) {
return apiHelper.successError(res,404,"User Not found!",user);
}
var passwordIsValid = bcrypt.compareSync(
req.body.password,
user.password
);
if (!passwordIsValid) {
return apiHelper.successError(res,401,"Invalid Password!",passwordIsValid);
}
var token = jwt.sign({ id: user.userId }, envConfig.JwtSecretKey, {
expiresIn: envConfig.JwtExpireTime // 24 hours
});
userData = {
userId: user.userId,
firstName: user.firstName,
lastName: user.lastName,
email: user.email,
phone: user.phone,
accessToken: token
}
return apiHelper.successError(res,200,"Login successfully",userData);
})
.catch(err => {
console.warn(err);
return apiHelper.successError(res,500,err.message,err.message);
});
};
//===================For Forget Password Here=============
exports.forgotPassword = (req, res) => {
User.findOne({
where: {
email: req.body.email
}
})
.then(user => {
if (!user) {
return apiHelper.successError(res,404,"User Not found!",user);
}
const otp = otpGenerator.generate(6, { digits :true,alphabets: false, upperCase: false, specialChars: false });
userData = {
id: user.id,
firstName: user.firstName,
lastName: user.lastName,
email: user.email,
phone: user.phone,
otp: otp,
//accessToken: token
}
transporter = apiHelper.mailConfig();
var email = req.body.email;
var htmlFile = 'app/views/templates/sendOtp.html';
apiHelper.readHTMLFile(htmlFile, function(err, html) {
var template = Handlebars.compile(html);
var replacements = {
firstName: user.firstName,
otp: otp
};
var htmlToSend = template(replacements);
var mailOptions = {
from : "lakhanjourney@gmail.com",
to : "lakhan121095@gmail.com",
subject : 'Your otp Code',
html : htmlToSend
};
UserOtp.create({
userId: user.id,
otp: otp,
expireTime: new Date(Date.now() + 2 * (60 * 60 * 1000) ),
status: '0'
})
console.log(UserOtp);
transporter.sendMail(mailOptions, function (error, response) {
if (error) {
console.log(error);
//callback(error);
}else{
console.log(new Date(Date.now() + 2 * (60 * 60 * 1000) ),);
return apiHelper.successError(res,200,"create successfully",UserOtp);
}
});
});
return apiHelper.successError(res,200,"Your otp sent on your email/phone please check",userData);
})
.catch(err => {
console.log(err);
return apiHelper.successError(res,500,err.message,err.message);
});
};
exports.validateUserSignUp = async (req, res) => {
User.findOne({
where: {
email: req.body.email
}
})
.then(user => {
if (!user) {
return apiHelper.successError(res,404,"User Not found!",user);
}else{
const userOtpData = UserOtp.findOne({
where: {
userId: user.userId,
otp: req.body.otp,
status:'0'
}
});
if(userOtpData){
updateUserOtpData = {
status:1
}
UserOtpupdate = UserOtp.update(updateUserOtpData,{
where: { userOtpId: userOtpData.userOtpId },
})
}else{
return apiHelper.successError(res,201,"invalid otp !",userOtpData);
}
userData = {
userId:user.userId,
// firstName: user.firstName,
// lastName: user.lastName,
// email: user.email,
// phone: user.phone,
email: user.email,
};
}
return apiHelper.successError(res,200,"User is validate",userData);
})
.catch(err => {
console.warn(err);
return apiHelper.successError(res,500,err.message,err.message);
});
}
Ater that resisted the model in index.js then create a controllers folder then create a user.controller.js
//// user.controller.js ////
Const apihelper = require("../helpers/apihelpers");
const User = require("../providers/user.provider")
export.create = async (req,res) => {
Result = await Userprovider.usercreate
}
////// index.route.js //////
const user = require("./user.routes");
;
module.exports = function(app) {
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
app.use("/api/user", user);
};
Comments
Post a Comment