当前位置: 首页 > news >正文

在项目中操作 MySQL

在现代Web开发中,Node.js因其非阻塞I/O模型和高效的性能成为了构建后端服务的热门选择之一。与此同时,MySQL作为最流行的关系型数据库管理系统之一,凭借其稳定性、可靠性和易用性,在数据存储方面扮演着重要角色。本文将详细介绍如何在一个Node.js项目中有效地操作MySQL数据库。

准备工作

安装Node.js和MySQL

确保你的开发环境中已经安装了Node.js。你可以通过运行 node -vnpm -v 来检查是否已正确安装Node.js及其包管理器npm。

接下来,你需要一个MySQL数据库实例。可以通过本地安装MySQL服务器或者使用云服务商提供的MySQL服务。

初始化项目

首先,创建一个新的Node.js项目目录,并初始化npm项目:

mkdir node-mysql-demo
cd node-mysql-demo
npm init -y

这会生成一个 package.json 文件,记录项目的依赖信息等。

安装必要的依赖

为了连接和操作MySQL数据库,我们将使用 mysql2 包。它是一个功能强大的MySQL客户端库,支持Promise API,便于异步编程。

npm install mysql2

连接到MySQL数据库

在项目根目录下创建一个名为 db.js 的文件,用于设置与MySQL数据库的连接配置:

const mysql = require('mysql2');

// 创建数据库连接池
const pool = mysql.createPool({
  host: 'localhost', // 数据库地址
  user: 'root',      // 用户名
  password: '',      // 密码
  database: 'test_db'// 数据库名称
});

module.exports = pool.promise(); // 返回一个支持Promise的连接池

这样做的好处是可以通过连接池来复用数据库连接,提高性能。

执行基本的CRUD操作

现在我们可以开始编写一些代码来执行基本的增删改查(CRUD)操作。

查询数据

创建一个 query.js 文件,演示如何从数据库中查询数据:

const db = require('./db');

async function getProducts() {
    const [rows, fields] = await db.query(
        'SELECT * FROM products WHERE status = ?',
        ['active']
    );
    console.log(rows);
}

getProducts();

这里我们使用了预处理语句,以防止SQL注入攻击。

插入数据

同样地,插入新记录也很简单:

async function addProduct(name, price) {
    const [result] = await db.execute(
        'INSERT INTO products (name, price) VALUES (?, ?)',
        [name, price]
    );
    console.log(result.insertId); // 输出新插入记录的ID
}

addProduct('New Product', 9.99);

更新数据

更新现有记录如下所示:

async function updateProduct(id, newName) {
    const [result] = await db.execute(
        'UPDATE products SET name = ? WHERE id = ?',
        [newName, id]
    );
    console.log(`Changed rows: ${result.affectedRows}`);
}

updateProduct(1, 'Updated Product Name');

删除数据

最后,删除记录可以这样做:

async function deleteProduct(id) {
    const [result] = await db.execute(
        'DELETE FROM products WHERE id = ?',
        [id]
    );
    console.log(`Deleted rows: ${result.affectedRows}`);
}

deleteProduct(1);

错误处理

在实际应用中,良好的错误处理机制是非常重要的。下面是如何改进上述函数以包含基本的错误处理逻辑:

async function safeOperation(operationFn) {
    try {
        await operationFn();
        console.log('Operation succeeded');
    } catch (error) {
        console.error('Error occurred:', error);
    }
}

safeOperation(() => addProduct('Another Product', 19.99));

结语

感谢您的阅读!如果您对在Node.js项目中操作MySQL或者其他相关话题有任何疑问或见解,欢迎继续探讨。


文章转载自:

http://RhME39Yf.gLnxd.cn
http://XjoxUqE5.gLnxd.cn
http://dWXOpl8y.gLnxd.cn
http://NuYV25Nl.gLnxd.cn
http://QB6tvt2w.gLnxd.cn
http://cUJEziFi.gLnxd.cn
http://Gq7aLBId.gLnxd.cn
http://xHMZ3kfs.gLnxd.cn
http://vfc73COb.gLnxd.cn
http://zJl6GoOf.gLnxd.cn
http://3eQwL9sv.gLnxd.cn
http://GIKz1wLH.gLnxd.cn
http://KxTSweRz.gLnxd.cn
http://SmrR7phH.gLnxd.cn
http://uICk9nGm.gLnxd.cn
http://z3X5ttHf.gLnxd.cn
http://ljkR8h3o.gLnxd.cn
http://bQZSpTtA.gLnxd.cn
http://s9aKQZRS.gLnxd.cn
http://yhMrnTtS.gLnxd.cn
http://am3SFMMC.gLnxd.cn
http://Uj8GQ6KY.gLnxd.cn
http://rVOql4pm.gLnxd.cn
http://2tGnI4xe.gLnxd.cn
http://BYOi1B5Z.gLnxd.cn
http://slyatcvx.gLnxd.cn
http://Qjemi020.gLnxd.cn
http://HkPPqdaj.gLnxd.cn
http://k50oJu31.gLnxd.cn
http://ca9RbgIx.gLnxd.cn
http://www.dtcms.com/a/15091.html

相关文章:

  • UE WebUI插件依赖插件JsonLibrary 插件使用笔记
  • 「软件设计模式」适配器模式
  • 总结:使用JDK原生HttpsURLConnection,封装HttpsUtil工具类,加载自定义证书验证,忽略ssl证书验证
  • python 的框架 dash 开发TodoList Web 应用
  • 【外卖店优先级——模拟】
  • 【python】Vscode 添加类型提示(Inlay Hints)
  • Windows 11 安装 Docker
  • CSV格式和普通EXCEL格式文件的区别
  • 【开源项目】数字孪生哈尔滨CIM/BIM—开源工程及源码
  • Webpack包
  • Linux软件编程:IO编程
  • 【Git】完美解决git push报错403
  • Vue 2 路由指南:从基础到高级
  • Git 设置代理
  • 12、《Spring Data JPA:极简数据库操作实战》
  • 【NLP】第十一章:隐马尔可夫模型 HMM (Hidden Markov Model)
  • 哈希表-三数之和
  • 探秘AES加密算法:多种Transformation全解析
  • 一个单点登录的token 无感刷新的node 后台 和前端调用
  • ubuntu 22.04 安装vsftpd服务
  • CCF-GESP 等级考试 2024年9月认证C++一级真题解析
  • k8s强制删除状态为 Terminating的Namespace
  • 如何利用Spring的@Value注解实现配置信息的动态注入与管理?
  • 自动化遇到的问题记录(遇到问题就更)
  • 如何测试和验证CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析
  • 【C语言】左旋字符串(三种实现方式)
  • 【Git版本控制器】:第一弹——Git初识,Git安装,创建本地仓库,初始化本地仓库,配置config用户名,邮箱信息
  • fps动作系统9:动画音频
  • DeepSeek遇袭后的深思:ManageEngine ITOM如何筑牢安全防线
  • Uniapp 获取定位详解:从申请Key到实现定位功能