跳到主要内容

第九章:数据库连接

简要说明

在本章中,我们将学习如何使用Node.js连接和操作数据库。数据库是现代应用程序的核心组件之一,掌握如何在Node.js中与数据库进行交互是开发全栈应用的关键技能。我们将重点介绍如何使用mysqlmongodb模块连接数据库,并执行基本的CRUD(创建、读取、更新、删除)操作。此外,我们还将探讨数据库连接池的使用,以提高应用程序的性能和可扩展性。

关键知识点

1. 使用mysql模块连接MySQL数据库

MySQL是一种流行的关系型数据库管理系统(RDBMS),广泛应用于Web应用程序中。我们将使用mysql模块来连接和操作MySQL数据库。

安装mysql模块

首先,我们需要安装mysql模块:

npm install mysql

连接MySQL数据库

以下是一个简单的示例,展示如何使用mysql模块连接到MySQL数据库:

const mysql = require('mysql');

// 创建数据库连接
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb'
});

// 连接数据库
connection.connect((err) => {
if (err) {
console.error('Error connecting to database:', err.stack);
return;
}
console.log('Connected to database with ID:', connection.threadId);
});

// 执行查询
connection.query('SELECT * FROM users', (err, results, fields) => {
if (err) throw err;
console.log('Query results:', results);
});

// 关闭连接
connection.end();

2. 使用mongodb模块连接MongoDB数据库

MongoDB是一种流行的NoSQL数据库,适用于处理大量非结构化数据。我们将使用mongodb模块来连接和操作MongoDB数据库。

安装mongodb模块

首先,我们需要安装mongodb模块:

npm install mongodb

连接MongoDB数据库

以下是一个简单的示例,展示如何使用mongodb模块连接到MongoDB数据库:

const { MongoClient } = require('mongodb');

// MongoDB连接URL
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);

// 数据库名称
const dbName = 'mydb';

async function main() {
// 连接数据库
await client.connect();
console.log('Connected successfully to server');
const db = client.db(dbName);
const collection = db.collection('users');

// 插入文档
const insertResult = await collection.insertOne({ name: 'Alice', age: 25 });
console.log('Inserted document:', insertResult.insertedId);

// 查询文档
const findResult = await collection.find({}).toArray();
console.log('Found documents:', findResult);

// 更新文档
const updateResult = await collection.updateOne({ name: 'Alice' }, { $set: { age: 26 } });
console.log('Updated documents:', updateResult.modifiedCount);

// 删除文档
const deleteResult = await collection.deleteOne({ name: 'Alice' });
console.log('Deleted documents:', deleteResult.deletedCount);

// 关闭连接
await client.close();
}

main().catch(console.error);

3. 基本的CRUD操作

无论是使用MySQL还是MongoDB,基本的CRUD操作都是数据库交互的核心。以下是CRUD操作的简要说明:

  • Create(创建):向数据库中插入新数据。
  • Read(读取):从数据库中查询数据。
  • Update(更新):更新数据库中的现有数据。
  • Delete(删除):从数据库中删除数据。

在前面的示例中,我们已经展示了如何在MySQL和MongoDB中执行这些操作。

4. 数据库连接池的使用

在高并发的应用程序中,频繁地创建和关闭数据库连接会导致性能问题。为了解决这个问题,我们可以使用数据库连接池。连接池允许我们在应用程序启动时创建一组数据库连接,并在需要时从池中获取连接,使用完毕后将连接返回到池中,而不是关闭它。

使用mysql模块的连接池

以下是一个使用mysql模块连接池的示例:

const mysql = require('mysql');

// 创建连接池
const pool = mysql.createPool({
connectionLimit: 10, // 最大连接数
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydb'
});

// 从连接池中获取连接
pool.getConnection((err, connection) => {
if (err) throw err;

// 执行查询
connection.query('SELECT * FROM users', (err, results, fields) => {
// 释放连接
connection.release();

if (err) throw err;
console.log('Query results:', results);
});
});

// 关闭连接池
pool.end();

使用mongodb模块的连接池

MongoDB的MongoClient默认使用连接池,因此我们不需要手动管理连接池。只需在需要时调用client.connect(),并在操作完成后调用client.close()即可。

总结

在本章中,我们学习了如何使用Node.js连接和操作MySQL和MongoDB数据库。我们探讨了基本的CRUD操作,并介绍了如何使用数据库连接池来提高应用程序的性能。掌握这些技能将使你能够构建功能强大的全栈应用程序。

在下一章中,我们将深入探讨如何使用Express框架构建RESTful API,并与数据库进行交互。