在 Express.js 应用中使用 MySQL 数据库,你通常会使用 mysql
或 mysql2
这样的库来创建和管理数据库连接,并执行查询。然而,mysql.createConnection
并不直接提供 execute
方法。相反,你可以使用 query
方法来执行 SQL 语句。
以下是一个使用 mysql2
库(它是 mysql
库的一个流行替代品,支持 Promises 和 async/await)的示例,展示了如何在 Express.js 应用中连接 MySQL 数据库并执行查询。
1. 安装依赖
首先,你需要安装 express
和 mysql2
库。
npm install express mysql2
2. 创建 Express 应用并连接 MySQL
以下是一个简单的示例,展示了如何设置 Express 应用,连接到 MySQL 数据库,并执行一个简单的查询。
const express = require('express');
const mysql = require('mysql2/promise');
const app = express();
const port = 3000;
// 数据库配置
const dbConfig = {
host: 'localhost',
user: 'your_username',
password: 'your_password',
database: 'your_database'
};
// 创建一个数据库连接池
let pool;
(async () => {
pool = await mysql.createPool(dbConfig);
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
})();
// 定义一个路由来执行查询
app.get('/data', async (req, res) => {
try {
const connection = await pool.getConnection();
const [rows, fields] = await connection.execute('SELECT * FROM your_table');
connection.release();
res.json(rows);
} catch (error) {
console.error('Error executing query:', error);
res.status(500).json({ error: 'Failed to fetch data' });
}
});
// 处理未捕获的异常
process.on('uncaughtException', (err) => {
console.error('Uncaught Exception:', err);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection at:', promise, 'reason:', reason);
process.exit(1);
});
注意事项
- 配置数据库连接:确保你已经正确配置了数据库连接参数(
host
,user
,password
,database
)。 - 使用连接池:在这个示例中,我们使用连接池来管理数据库连接。连接池可以显著提高性能和可靠性。
- 错误处理:示例中包含了基本的错误处理逻辑。在生产环境中,你可能需要更详细的日志记录和错误处理。
- 安全性:不要将数据库凭据硬编码在代码中。考虑使用环境变量或配置文件来管理敏感信息。
- 关闭连接:虽然在这个示例中使用了连接池,但在不使用连接池的情况下,记得在查询完成后关闭数据库连接。
使用 query
方法(替代 execute
)
虽然 mysql2
提供了 execute
方法来执行带有参数的查询,但你也可以使用更通用的 query
方法。以下是一个使用 query
方法的示例:
app.get('/data', async (req, res) => {
try {
const connection = await pool.getConnection();
const [rows, fields] = await connection.query('SELECT * FROM your_table');
connection.release();
res.json(rows);
} catch (error) {
console.error('Error executing query:', error);
res.status(500).json({ error: 'Failed to fetch data' });
}
});
在这个例子中,query
方法被用来执行相同的 SQL 查询。query
方法更通用,适用于所有类型的 SQL 语句。