CRUD stands for Create, Read, Update, and Delete. These are the four basic operations that can be performed on data in a database. In this section, we will explore how to implement CRUD operations using Node.js with both MongoDB (using Mongoose) and SQL databases (using Sequelize).

  1. CRUD Operations with MongoDB and Mongoose

Setting Up Mongoose

First, ensure you have Mongoose installed in your Node.js project:

npm install mongoose

Connecting to MongoDB

Create a file named db.js to handle the database connection:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
  console.log('Connected to MongoDB');
});

module.exports = db;

Defining a Schema and Model

Create a file named models/User.js:

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: String,
  email: String,
  age: Number,
});

const User = mongoose.model('User', userSchema);

module.exports = User;

Create Operation

To create a new user:

const User = require('./models/User');

// Create a new user
const createUser = async () => {
  const user = new User({
    name: 'John Doe',
    email: '[email protected]',
    age: 30,
  });

  try {
    const savedUser = await user.save();
    console.log('User created:', savedUser);
  } catch (error) {
    console.error('Error creating user:', error);
  }
};

createUser();

Read Operation

To read users from the database:

const User = require('./models/User');

// Read all users
const readUsers = async () => {
  try {
    const users = await User.find();
    console.log('Users:', users);
  } catch (error) {
    console.error('Error reading users:', error);
  }
};

readUsers();

Update Operation

To update a user:

const User = require('./models/User');

// Update a user by ID
const updateUser = async (userId) => {
  try {
    const updatedUser = await User.findByIdAndUpdate(
      userId,
      { age: 35 },
      { new: true }
    );
    console.log('User updated:', updatedUser);
  } catch (error) {
    console.error('Error updating user:', error);
  }
};

updateUser('60c72b2f9b1d4c1f8c8b4567');

Delete Operation

To delete a user:

const User = require('./models/User');

// Delete a user by ID
const deleteUser = async (userId) => {
  try {
    await User.findByIdAndDelete(userId);
    console.log('User deleted');
  } catch (error) {
    console.error('Error deleting user:', error);
  }
};

deleteUser('60c72b2f9b1d4c1f8c8b4567');

  1. CRUD Operations with SQL Databases and Sequelize

Setting Up Sequelize

First, ensure you have Sequelize and a SQL database driver (e.g., pg for PostgreSQL) installed:

npm install sequelize pg pg-hstore

Connecting to the Database

Create a file named db.js to handle the database connection:

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'postgres',
});

module.exports = sequelize;

Defining a Model

Create a file named models/User.js:

const { DataTypes } = require('sequelize');
const sequelize = require('../db');

const User = sequelize.define('User', {
  name: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  email: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: true,
  },
  age: {
    type: DataTypes.INTEGER,
  },
});

module.exports = User;

Create Operation

To create a new user:

const User = require('./models/User');

// Create a new user
const createUser = async () => {
  try {
    const user = await User.create({
      name: 'Jane Doe',
      email: '[email protected]',
      age: 28,
    });
    console.log('User created:', user);
  } catch (error) {
    console.error('Error creating user:', error);
  }
};

createUser();

Read Operation

To read users from the database:

const User = require('./models/User');

// Read all users
const readUsers = async () => {
  try {
    const users = await User.findAll();
    console.log('Users:', users);
  } catch (error) {
    console.error('Error reading users:', error);
  }
};

readUsers();

Update Operation

To update a user:

const User = require('./models/User');

// Update a user by ID
const updateUser = async (userId) => {
  try {
    const user = await User.findByPk(userId);
    if (user) {
      user.age = 32;
      await user.save();
      console.log('User updated:', user);
    } else {
      console.log('User not found');
    }
  } catch (error) {
    console.error('Error updating user:', error);
  }
};

updateUser(1);

Delete Operation

To delete a user:

const User = require('./models/User');

// Delete a user by ID
const deleteUser = async (userId) => {
  try {
    const user = await User.findByPk(userId);
    if (user) {
      await user.destroy();
      console.log('User deleted');
    } else {
      console.log('User not found');
    }
  } catch (error) {
    console.error('Error deleting user:', error);
  }
};

deleteUser(1);

Summary

In this section, we covered how to perform CRUD operations using Node.js with both MongoDB (using Mongoose) and SQL databases (using Sequelize). We learned how to:

  • Set up and connect to MongoDB and SQL databases.
  • Define schemas and models.
  • Implement Create, Read, Update, and Delete operations.

These fundamental operations are essential for any application that interacts with a database. In the next module, we will delve into authentication and authorization, which are crucial for securing your application.

Node.js Course

Module 1: Introduction to Node.js

Module 2: Core Concepts

Module 3: File System and I/O

Module 4: HTTP and Web Servers

Module 5: NPM and Package Management

Module 6: Express.js Framework

Module 7: Databases and ORMs

Module 8: Authentication and Authorization

Module 9: Testing and Debugging

Module 10: Advanced Topics

Module 11: Deployment and DevOps

Module 12: Real-World Projects

© Copyright 2024. All rights reserved