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