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).
- CRUD Operations with MongoDB and Mongoose
Setting Up Mongoose
First, ensure you have Mongoose installed in your Node.js project:
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');
- 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:
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
- Introduction to NPM
- Installing and Using Packages
- Creating and Publishing Packages
- Semantic Versioning
Module 6: Express.js Framework
- Introduction to Express.js
- Setting Up an Express Application
- Middleware
- Routing in Express
- Error Handling
Module 7: Databases and ORMs
- Introduction to Databases
- Using MongoDB with Mongoose
- Using SQL Databases with Sequelize
- CRUD Operations
Module 8: Authentication and Authorization
Module 9: Testing and Debugging
- Introduction to Testing
- Unit Testing with Mocha and Chai
- Integration Testing
- Debugging Node.js Applications
Module 10: Advanced Topics
Module 11: Deployment and DevOps
- Environment Variables
- Using PM2 for Process Management
- Deploying to Heroku
- Continuous Integration and Deployment