next-js-sequelize

Next.js with Sequelize and PostgreSQL

Today we will see how to implement Next.js with Sequelize and PostgreSQL.

First of all, you have to generate your Next.js starter project then need to install the below packages

npm install pg pg-hstore sequelize validator

then create a folder like model and index.js file into this and the index.js file looks like the below

// model/index.js
import Sequelize from 'sequelize'

const sequelize = new Sequelize('db-name', 'db-user', 'db-paasword', {
    host: 'localhost',
    dialect: 'postgres',
    operatorAliases: false,
    pool: {
        max: 5,
        min: 0,
        acquire: 30000,
        idle: 10000
    }
})

const db = {}

db.Sequelize = Sequelize
db.sequelize = sequelize
//...

export default db

Remember that the pool is optional, it is here Sequelize connection pool configuration.

Need to know about pool keys:

  • max the maximum number of connections in the pool.
  • min the minimum number of connections in the pool.
  • idle maximum time, in milliseconds, that a connection can be idle before being released.
  • acquire maximum time, in milliseconds, that pool will try to get a connection before throwing error.

Now create a model into the model folder like user.js and the file will look like below

// model/user.js
const userModel = (sequelize, Sequelize) => {
    const User = sequelize.define("user", {
        id: {
            type: Sequelize.UUID,
            defaultValue: Sequelize.UUIDV4,
            primaryKey: true
        },
        name: {
            type: Sequelize.STRING,
            allowNull: false
        },
        email: {
            type: Sequelize.STRING,
            allowNull: false,
            trim: true
        }
    })
  
    return User
}

export default userModel

Again open up the index.js file and update like below

// model/index.js
import userModel from './user'
// aftere that below line add like that
// db.sequelize = sequelize
//...
db.users = userModel(sequelize, Sequelize)

now save and close the file.

Now create an API file for save data into the database. under the pages folder add an api named folder and into this folder add user.js named file and put code like that

// pages/api/user.js
import isEmail from 'validator/lib/isEmail'
import isLength from 'validator/lib/isLength'
import db from '../../../model'
db.sequelize.sync()
const User = db.users

export default async (req, res) => {
    // console.log(req.body)
    // Recieved params from request
    let { name, email } = req.body
    try {
        // check email, name, password format
        if (!isLength(name, {min: 3, max: 15})) {
            return res.status(422).send("Name must be 3-10 characters long");
        } else if (!isEmail(email)){
            return res.status(422).send("Email must be valid");
        }

        // Check if user with that email if already exists
        const user = await User.findOne({
            where: { email: email }
        })
        if(user){
            return res.status(422).send(`User already exist with that ${email}`)
        }
        const newUser = await User.create({
            name, 
            email
        })
        res.status(201).send(newUser)
    } catch (error) {
        console.error(error)
        res.status(500).send("Error in signup. Please try again.")
    }
}

That’s it! Now using postman call the URL with the necessary key & value and check the database, you will see tables are created with columns & values.

Happy Coding 🙂