Node.js 是一個強大的 JavaScript 運行環(huán)境,廣泛用于構(gòu)建高性能的網(wǎng)絡(luò)應(yīng)用。在開發(fā)過程中,連接數(shù)據(jù)庫是不可避免的一步。MySQL 是最受歡迎的關(guān)系型數(shù)據(jù)庫之一,本文將詳細(xì)介紹如何在 Node.js 環(huán)境中連接和操作 MySQL 數(shù)據(jù)庫。
安裝 Node.js 和 MySQL
在開始之前,請確保您已安裝 Node.js 和 MySQL。如果尚未安裝,可以從 Node.js 和 MySQL 的官方網(wǎng)站下載安裝包并進行安裝。
設(shè)置 MySQL 數(shù)據(jù)庫
安裝 MySQL 后,您需要創(chuàng)建一個數(shù)據(jù)庫和表。您可以使用 MySQL 命令行或圖形化工具(如 phpMyAdmin)來完成這一步。假設(shè)我們創(chuàng)建一個名為“test_db”的數(shù)據(jù)庫,并在其中創(chuàng)建一個名為“users”的表:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255)
);安裝 MySQL 模塊
Node.js 需要 MySQL 庫來連接和操作 MySQL 數(shù)據(jù)庫。最常用的庫是 mysql。使用 npm 安裝此模塊:
npm install mysql
創(chuàng)建連接
安裝完 MySQL 模塊后,可以開始編寫連接數(shù)據(jù)庫的代碼。在項目根目錄下創(chuàng)建一個文件,例如 db.js,并添加以下代碼:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'your-username',
password: 'your-password',
database: 'test_db'
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL: ' + err.stack);
return;
}
console.log('Connected to MySQL as id ' + connection.threadId);
});請確保將“your-username”和“your-password”替換為您自己的 MySQL 用戶名和密碼。
執(zhí)行 SQL 查詢
連接成功后,可以使用 Node.js 查詢數(shù)據(jù)庫。以下是如何添加和查詢數(shù)據(jù)的示例:
// 添加數(shù)據(jù)
const insertQuery = 'INSERT INTO users (name, email) VALUES (?, ?)';
const userData = ['John Doe', 'john@example.com'];
connection.query(insertQuery, userData, (err, results) => {
if (err) throw err;
console.log('User added, ID:', results.insertId);
});
// 查詢數(shù)據(jù)
const selectQuery = 'SELECT * FROM users';
connection.query(selectQuery, (err, results) => {
if (err) throw err;
console.log('Users:', results);
});處理查詢結(jié)果
查詢結(jié)果通常以數(shù)組形式返回,對于 SELECT 查詢,結(jié)果包含所有符合條件的行。您可以通過遍歷結(jié)果數(shù)組來處理和使用這些數(shù)據(jù)。例如:
results.forEach(user => {
console.log("User: ${user.name}, Email: ${user.email}");
});錯誤處理
在數(shù)據(jù)庫操作中,錯誤處理十分重要。您可以在回調(diào)函數(shù)中檢查錯誤,并根據(jù)需要進行處理。確保在生產(chǎn)環(huán)境中記錄錯誤日志,以便于問題排查。
關(guān)閉連接
完成數(shù)據(jù)庫操作后,應(yīng)關(guān)閉連接以釋放資源:
connection.end((err) => {
if (err) {
console.error('Error ending the connection:', err);
return;
}
console.log('Connection closed.');
});使用連接池
對于高并發(fā)應(yīng)用,建議使用連接池以提高性能。連接池管理多個連接,減少了頻繁創(chuàng)建和銷毀連接的開銷。
const pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
user: 'your-username',
password: 'your-password',
database: 'test_db'
});
pool.query('SELECT * FROM users', (err, results) => {
if (err) throw err;
console.log(results);
});使用異步/等待(Async/Await)
為了更好地處理異步操作,您可以將 mysql 模塊與 util.promisify 一起使用,從而利用現(xiàn)代 JavaScript 的異步/等待語法:
const util = require('util');
const query = util.promisify(connection.query).bind(connection);
(async () => {
try {
const results = await query('SELECT * FROM users');
console.log(results);
} catch (err) {
console.error(err);
} finally {
connection.end();
}
})();總結(jié)
通過以上步驟,您已經(jīng)了解了如何在 Node.js 中連接和操作 MySQL 數(shù)據(jù)庫。掌握這些技能,您可以輕松實現(xiàn)數(shù)據(jù)的存儲、查詢和管理。希望這篇指南對您的開發(fā)工作有所幫助。