Node JS User Registration Rest API using MySQL

User registration rest API in Node js using MySQL + express js +jwt bcrypt; Through this tutorial, i am going to show you how to create user signup/registration REST Api in node.js express + MySQL + jwt bcrypt. And as well as; how to validate user signup data with rest api before insert to database.

Every web and app need user registration; so in this tutorial, you will learn how to build user registration or signup rest api with MySQL + JWT + bcrypt + Node js + Express.

Node js User RegistrationRest API using MySQL + Express js

  • Step 1 – Create Database and Table
  • Step 2 – Create Node Express js App
  • Step 3 – Connect App to Database
  • Step 4 – Install Packages
  • Step 5 – Create Server.js File
  • Step 6 – Create Validation and Router File
  • Step 7 – Start Node Express Js App Server
  • Step 8 – Test Rest Apis with PostMan App

Step 1 – Create Database And Table

Run the following command on the terminal to create a database and table:

CREATE DATABASE node-app
CREATE TABLE users (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  email varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  password varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY email (email)
 ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Step 2 – Create Node Express js App

Run the following command on terminal to create node js app:

mkdir nodejs-auth-rest-api-mysql

cd nodejs-auth-rest-api-mysql

npm init -y

Step 3 – Connect App to Database

Create dbConnection.js file into your app root directory add the following code into it to connect your node js express app to database:

var mysql = require('mysql');
var conn = mysql.createConnection({
  host: 'localhost', // Replace with your host name
  user: 'root',      // Replace with your database username
  password: '',      // Replace with your database password
  database: 'my-node' // // Replace with your database Name
}); 
conn.connect(function(err) {
  if (err) throw err;
  console.log('Database is connected successfully !');
});
module.exports = conn;

Step 4 – Install Packages

Run the following command on terminal to install express express-validator mysql body-parser jsonwebtoken bcryptjs cors into your node js express app:

npm install express express-validator mysql body-parser jsonwebtoken bcryptjs cors --save
  • ExpressExpress is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.
  • Express-validator — Express Validator is a set of Express. js middleware that wraps validator. js , a library that provides validator and sanitizer functions. Simply said, Express Validator is an Express middleware library that you can incorporate in your apps for server-side data validation.
  • MySQL — MySQL an open-source relational database management system (RDBMS).
  • body-parser — Express body-parser is an npm library used to process data sent through an HTTP request body. It exposes four express middlewares for parsing text, JSON, url-encoded and raw data set through an HTTP request body. 
  • jsonwebtoken — This module provides Express middleware for validating JWTs (JSON Web Tokens) through the jsonwebtoken module. The decoded JWT payload is available on the request object.
  • bcryptjs — The bcrypt hashing function allows us to build a password security platform that scales with computation power and always hashes every password with a salt.
  • cors — CORS is a node.js package for providing a Connect/Express middleware that can be used to enable CORS with various options.

Step 5 – Create Server.js File

Create server.js file and import express express-validator mysql body-parser jsonwebtoken bcryptjs cors into your server.js file; as shown below:

const createError = require('http-errors');
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const indexRouter = require('./router.js');
const app = express();
app.use(express.json());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(cors());
app.use('/api', indexRouter);
// Handling Errors
app.use((err, req, res, next) => {
    // console.log(err);
    err.statusCode = err.statusCode || 500;
    err.message = err.message || "Internal Server Error";
    res.status(err.statusCode).json({
      message: err.message,
    });
});
app.listen(3000,() => console.log('Server is running on port 3000'));

Step 6 – Create Validation and Router File

Create validation.js and router.js. So visit your app root directory and create this files.

Then add the following code into your validation.js file:

const { check } = require('express-validator');
exports.signupValidation = [
    check('name', 'Name is requied').not().isEmpty(),
    check('email', 'Please include a valid email').isEmail().normalizeEmail({ gmail_remove_dots: true }),
    check('password', 'Password must be 6 or more characters').isLength({ min: 6 })
]

Then create router.js file and add the following code into it:

const express = require('express');
const router = express.Router();
const db  = require('./dbConnection');
const { signupValidation } = require('./validation');
const { validationResult } = require('express-validator');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
router.post('/register', signupValidation, (req, res, next) => {
  db.query(
    `SELECT * FROM users WHERE LOWER(email) = LOWER(${db.escape(
      req.body.email
    )});`,
    (err, result) => {
      if (result.length) {
        return res.status(409).send({
          msg: 'This user is already in use!'
        });
      } else {
        // username is available
        bcrypt.hash(req.body.password, 10, (err, hash) => {
          if (err) {
            return res.status(500).send({
              msg: err
            });
          } else {
            // has hashed pw => add to database
            db.query(
              `INSERT INTO users (name, email, password) VALUES ('${req.body.name}', ${db.escape(
                req.body.email
              )}, ${db.escape(hash)})`,
              (err, result) => {
                if (err) {
                  throw err;
                  return res.status(400).send({
                    msg: err
                  });
                }
                return res.status(201).send({
                  msg: 'The user has been registerd with us!'
                });
              }
            );
          }
        });
      }
    }
  );
});
module.exports = router;

Step 7 – Start Node Express Js App Server

Execute the following command on terminal to start node express js server:

//run the below command

nodemon server.js

after run this command open your browser and hit 

http://127.0.0.1:3000/api/register

Step 8 – Test Rest Apis with PostMan App

Test node js experss + mysql user registration api with Postman app:

POST - http://localhost:3000/api/register

Conclusion

Registration rest API in Node js using MySQL and express js jwt bcrypt example; Through this tutorial, you have learned how to build user registration REST API in node.js express and MySQL with jwt bcrypt.

Recommended Node JS Tutorials

Leave a Comment