是的,MySQL 完全可以与 Node.js 一起使用,这是现代 Web 开发中非常常见的组合。
const mysql = require('mysql');
// 创建连接
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'my_db'
});
// 连接数据库
connection.connect();
// 执行查询
connection.query('SELECT * FROM users', (error, results, fields) => {
if (error) throw error;
console.log('查询结果: ', results);
});
// 关闭连接
connection.end();
const { Sequelize, Model, DataTypes } = require('sequelize');
// 初始化 Sequelize
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql'
});
// 定义模型
class User extends Model {}
User.init({
username: DataTypes.STRING,
birthday: DataTypes.DATE
}, { sequelize, modelName: 'user' });
// 同步模型到数据库
(async () => {
await sequelize.sync();
// 创建记录
const jane = await User.create({
username: 'janedoe',
birthday: new Date(1980, 6, 20)
});
console.log(jane.toJSON());
})();
import "reflect-metadata";
import { createConnection } from "typeorm";
import { User } from "./entity/User";
createConnection().then(async connection => {
console.log("Inserting a new user into the database...");
const user = new User();
user.firstName = "Timber";
user.lastName = "Saw";
user.age = 25;
await connection.manager.save(user);
console.log("Saved a new user with id: " + user.id);
}).catch(error => console.log(error));
使用连接池:避免频繁创建和销毁连接
const pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
user: 'root',
password: 'password',
database: 'my_db'
});
环境变量管理:不要将数据库凭据硬编码在代码中
错误处理:妥善处理数据库错误和连接问题
使用迁移工具:如 Sequelize migrations 或 db-migrate
考虑使用 Promise 或 async/await:使代码更简洁
// 使用 util.promisify
const util = require('util');
const query = util.promisify(connection.query).bind(connection);
async function getUsers() {
try {
const rows = await query('SELECT * FROM users');
return rows;
} catch (err) {
console.error(err);
}
}
如果不需要关系型数据库的特性,也可以考虑: - MongoDB (与 Node.js 集成更简单) - PostgreSQL (功能更强大的关系型数据库)
MySQL 与 Node.js 的组合已被证明是稳定、高效的选择,适合各种规模的应用程序开发。