您好,登录后才能下订单哦!
# Node.js怎么安装MySQL包
## 前言
MySQL是最流行的开源关系型数据库之一,而Node.js作为高效的JavaScript运行时环境,与MySQL的结合能够为开发者提供强大的后端数据存储能力。本文将详细介绍如何在Node.js项目中安装和使用`mysql`/`mysql2`包,涵盖从环境准备到实际操作的完整流程。
---
## 目录
1. [环境准备](#环境准备)
2. [安装MySQL包](#安装mysql包)
- 通过npm安装
- 通过yarn安装
3. [基础连接配置](#基础连接配置)
4. [连接池的使用](#连接池的使用)
5. [执行SQL查询](#执行sql查询)
6. [错误处理](#错误处理)
7. [TypeScript支持](#typescript支持)
8. [常见问题解答](#常见问题解答)
9. [总结](#总结)
---
## 环境准备
在开始之前,请确保已满足以下条件:
1. **Node.js环境**
- 建议安装最新的LTS版本(如v18.x)
- 通过终端检查版本:
```bash
node -v
npm -v
```
2. **MySQL数据库**
- 本地安装或远程可访问的MySQL服务(5.7+或8.0+)
- 确保记住以下信息:
- 主机地址(如`localhost`)
- 端口号(默认`3306`)
- 用户名和密码
- 目标数据库名称
---
## 安装MySQL包
Node.js社区有两个主流MySQL驱动包可选:
| 包名 | 特点 | 推荐场景 |
|-----------|-----------------------------|----------------|
| `mysql` | 历史悠久,社区支持丰富 | 传统项目维护 |
| `mysql2` | 性能更优,支持Promise和预处理语句 | 新项目首选 |
### 通过npm安装
```bash
# 安装mysql2(推荐)
npm install mysql2
# 或安装原始mysql包
npm install mysql
yarn add mysql2
// 使用mysql2示例
const mysql = require('mysql2');
// 创建连接配置
const connection = mysql.createConnection({
host: 'localhost',
port: 3306,
user: 'root',
password: 'yourpassword',
database: 'test_db'
});
// 建立连接
connection.connect(err => {
if (err) {
console.error('连接失败:', err.stack);
return;
}
console.log('连接成功,ID:', connection.threadId);
});
// 关闭连接(实际项目应在适当位置调用)
// connection.end();
建议使用dotenv
包保护敏感信息:
安装dotenv:
npm install dotenv
创建.env
文件:
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=secret
DB_NAME=app_db
修改连接代码: “`javascript require(‘dotenv’).config();
const connection = mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME });
---
## 连接池的使用
高并发场景应使用连接池提升性能:
```javascript
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'app_db',
waitForConnections: true,
connectionLimit: 10, // 最大连接数
queueLimit: 0 // 无排队限制
});
// 执行查询
pool.query('SELECT * FROM users', (err, results) => {
if (err) throw err;
console.log(results);
});
// 使用Promise写法
const [rows] = await pool.promise().query('SELECT 1+1 AS solution');
console.log(rows[0].solution); // 2
// 回调方式
connection.query(
'SELECT * FROM products WHERE price > ?',
[100],
(err, results, fields) => {
console.log(results);
}
);
// Promise方式(mysql2专属)
const [rows] = await connection.promise().query(
'INSERT INTO users(name) VALUES(?)',
['John']
);
防止SQL注入的最佳实践:
const stmt = await connection.promise().prepare(
'UPDATE articles SET views = ? WHERE id = ?'
);
await stmt.execute([1200, 15]);
connection.on('error', err => {
if (err.code === 'PROTOCOL_CONNECTION_LOST') {
console.error('数据库连接丢失');
} else {
throw err;
}
});
try {
const [result] = await connection.promise().query(badSql);
} catch (err) {
console.error('查询出错:', err.code);
// ER_NO_SUCH_TABLE: 表不存在
// ER_ACCESS_DENIED_ERROR: 权限问题
}
mysql2提供完整的类型定义:
import { Pool } from 'mysql2/promise';
interface User {
id: number;
name: string;
}
const pool: Pool = createPool({ /* 配置 */ });
const [users] = await pool.query<User[]>('SELECT * FROM users');
connectTimeout
配置(默认10秒)
const query = connection.query('SELECT * FROM large_table');
query.on('result', row => {
// 逐行处理
});
timezone: '+08:00' // 东八区
mysql2
,性能更好且支持现代特性通过本文的指导,您应该已经掌握了在Node.js中操作MySQL的核心方法。接下来可以探索ORM工具(如Sequelize或TypeORM)来获得更高级的抽象能力。
扩展阅读: - MySQL2官方文档 - Node.js数据库最佳实践 “`
注:本文实际约2000字,根据具体细节的展开程度可调整到2100字。建议在代码示例部分增加更多实际案例来扩充内容。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。