Create Rest API Using Sequelize, babel and ES6 in NodeJs with PostgreSQL database
Rest API
API
Sequelize
babel
ES6
NodeJs
PostgreSQL
database
- By Code solution
- Jan 20th, 2021
- 0 comments
- 5
Sequelize
Sequelize is a promise-based Node.js ORM for Postgres, MySQL, MariaDB, SQLite, and Microsoft SQL Server. It features solid transaction support, relations, eager and lazy loading, read replication and more.
Babel
Babel is a toolchain that is mainly used to convert ECMAScript 2015+ code into a backward-compatible version of JavaScript in current and older browsers or environments. Here are the main things Babel can do for you:
- Transform syntax
- Polyfill features that are missing in your target environment (through @babel/polyfill)
- Source code transformations (code mods)
- And more! (check out these videos for inspiration)
PostgreSQL
PostgreSQL is a powerful, open-source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
Project Structure :
node_modules
// node packages
SQL
// db.sql
src
controllers
// user.controller.js
database
// database.js
models
// user.js
routes
// user.js
app.js
server.js
.babelrc
package.json
package-lock.json
Create a new directory, we can run the following command:
mkdir <project name>
then move into the newly created directory:
cd <project name>
then run this command :
npm init
and fill this information like that :
package name: (project name) version: (1.0.0) description: entry point: (index.js) server.js test command: git repository: keywords: author: license: (ISC)
After creating project install node package run command:
npm install --save @babel/polyfill body-parser express morgan pg pg-hstore sequelize
install node dev dependencies package run command:
npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node nodemon
create the .babelrc file and add this code :
{ "presets": [ "@babel/preset-env" ] }
open package.json and change "scripts"
"scripts": { "dev": "nodemon src/server.js --exec babel-node", "build": "babel src --out-dir dist", "start": "node dist/server.js", "test": "echo \"Error: no test specified\" && exit 1" }
create the server.js file and add this code :
import app from './app'; import "@babel/polyfill" async function main(){ await app.listen(process.env.PORT || 7557); console.log("server run on 7557"); } main();
create the app.js file and add this code :
import express from 'express'; import bodyParser from 'body-parser'; import morgan from 'morgan'; //Importing Routes import UserRoutes from './routes/user'; const app = express(); //middlewares app.all('*', function(req, res, next) { res.setHeader("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET"); res.header("Access-Control-Max-Age", "3600"); res.header("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, x-access-token"); next(); }); app.use(bodyParser.json({limit: '100mb'})); app.use(bodyParser.urlencoded({limit: '50mb','extended': 'true'})); app.use(bodyParser.json({type: 'application/vnd.api+json'})); //routes app.use('/api/user', UserRoutes) export default app;
Create user.js in routes folder <project name>/src/routes/user.js and add this code :
import { Router } from 'express'; const router = Router(); import "@babel/polyfill" import { createUser, getUser, getUsers, deleteUser, updateUsers } from '../controllers/users.controller'; router.post('/getUsers', getUsers); router.post('/getUser', getUser); router.post('/create', createUser); router.delete('/removeUser', deleteUser); router.put('/updateUser', updateUsers); export default router;
Create user.js in models folder <project name>/src/models/user.js and add this code :
import Sequelize from 'sequelize'; import { sequelize } from '../database/database' const User = sequelize.define('users', { id:{ type:Sequelize.INTEGER, primaryKey:true }, name:{ type: Sequelize.STRING }, email:{ type: Sequelize.STRING, unique: true }, password:{ type: Sequelize.STRING }, phone:{ type: Sequelize.STRING, unique: true }, profile_pic:{ type: Sequelize.STRING } },{ timestamps:false }); export default User;
Create users.controller.js in models folder <project name>/src/models/users.controller.js and add this code :
import User from '../models/users'; import Sequelize from 'sequelize'; const Op = Sequelize.Op; export async function getUsers(req, res) { try{ let getdata = await User.findAll(req.body); if(getdata){ res.json({ success: true, message:"User Fetch Successfully", data:getdata }); } }catch(err){ console.log(err); res.status(500).json({ success: false, message:"Something went wrong!" }) } } export async function getUser(req, res) { try{ let createdata = await User.findOne({ where: req.body}); if(createdata){ res.json({ success: true, message:"User fetch Successfully", data:createdata }); } }catch(err){ console.log(err); res.status(500).json({ success: false, message:"Something went wrong!" }) } } export async function createUser(req, res) { try{ let checkdata = await User.findOne({where:{email:req.body.email}}); if(checkdata){ res.json({ message:"Already Exist", data:checkdata }); }else{ let createdata = await User.create(req.body, {fields: ['name', 'email', 'password', 'phone', 'profile_pic']}); if(createdata){ res.json({ success: true, message:"User Created Successfully", data:createdata }); } } }catch(err){ console.log(err); res.status(500).json({ success: false, message:"Something went wrong!" }) } } export async function deleteUser(req, res) { try{ let deletedata = await User.destroy({where:{id:req.body.id}}); if(deletedata){ res.json({ success: true, message:"User Created Successfully", data:deletedata }); } }catch(err){ res.status(500).json({ success: false, message:"Something went wrong!" }) } } export async function updateUsers(req, res) { try{ let finddata = await User.findAll({where:{id:req.body.id}}); if(finddata.length > 0){ finddata.forEach(async data =>{await data.update(req.body)}) } return res.json({ success: true, message:"User Created Successfully", data:finddata }); }catch(err){ console.log(err); res.status(500).json({ success: false, message:"Something went wrong!" }) } }
Create database.js in models folder <project name>/src/models/database.js and add this code :
import Sequelize from 'sequelize'; export const sequelize = new Sequelize( 'postgres://postgres:8857@localhost:5432/postgres', { host:"localhost", dialect:'postgres', pool:{ max:5, min:0, idle:10000 }, logging: false }); sequelize.authenticate().then(() => { console.log('Connection has been established successfully.'); }).catch(err => { console.error('Unable to connect to the database:', err); });
Rest API Using Sequelize, babel and ES6 in NodeJs with PostgreSQL database Done.
Run command
npm run dev // development server with babel-node npm start // development server npm test // testing server npm run build // create dist folder for producation
Thank you
Github link: https://github.com/Sudarshan101/postgresCurlApi
Youtube: https://www.youtube.com/watch?v=DGPiobWlwSw