Express.js Database Integration
Connect Express.js to databases like MongoDB, PostgreSQL, and MySQL. Learn about ORMs, query optimization, and data modeling.
Overview
Express.js works seamlessly with any database. This guide covers integrating popular databases and using ORMs for data management.
Database Options
Popular choices for Express.js applications: - **MongoDB**: NoSQL document database, great with Mongoose ODM - **PostgreSQL**: Powerful relational database, works with Sequelize or Prisma - **MySQL**: Popular relational database with strong ORM support - **SQLite**: Lightweight, file-based database for development
ORMs and ODMs
Object-Relational Mapping (ORM) tools help you work with databases using JavaScript objects: - **Mongoose**: MongoDB ODM with schema validation - **Sequelize**: Multi-database ORM supporting PostgreSQL, MySQL, SQLite - **Prisma**: Modern type-safe ORM with great developer experience
Connection Management
Properly managing database connections is crucial for performance and reliability. Use connection pooling and handle connection errors gracefully.
Code Examples
MongoDB with Mongoose
const mongoose = require('mongoose');
const connectDB = async () => {
try {
await mongoose.connect(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
console.log('MongoDB connected');
} catch (error) {
console.error('MongoDB connection error:', error);
process.exit(1);
}
};
// User Schema
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true },
password: { type: String, required: true },
createdAt: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
module.exports = { connectDB, User };PostgreSQL with Prisma
// schema.prisma
// datasource db {
// provider = "postgresql"
// url = env("DATABASE_URL")
// }
//
// model User {
// id Int @id @default(autoincrement())
// email String @unique
// name String?
// posts Post[]
// createdAt DateTime @default(now())
// }
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
// CRUD Operations
app.get('/users', async (req, res) => {
const users = await prisma.user.findMany({
include: { posts: true }
});
res.json(users);
});
app.post('/users', async (req, res) => {
const user = await prisma.user.create({
data: req.body
});
res.status(201).json(user);
});Connection Pool with PostgreSQL
const { Pool } = require('pg');
const pool = new Pool({
user: process.env.DB_USER,
host: process.env.DB_HOST,
database: process.env.DB_NAME,
password: process.env.DB_PASSWORD,
port: 5432,
max: 20, // Maximum connections
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
// Query helper
const query = async (text, params) => {
const start = Date.now();
const result = await pool.query(text, params);
console.log('Query executed in', Date.now() - start, 'ms');
return result;
};
// Usage in routes
app.get('/users', async (req, res) => {
const { rows } = await query('SELECT * FROM users');
res.json(rows);
});Frequently Asked Questions
Which database should I choose for my Express app?
Should I use an ORM or raw queries?
How do I handle database errors in Express?
Need expert help with Express.js?
Our team at Slashdev.io builds production-ready Express.js applications.