首页 > 数据库 >使用 Node.js 连接 MySQL

使用 Node.js 连接 MySQL

时间:2023-06-03 18:44:07浏览次数:56  
标签:Node RowDataPacket mysql2 const err js result MySQL

概述

当使用 Node.js 开发 Web 应用程序时,经常需要与数据库进行交互来存储和检索数据。MySQL 是一个流行的关系型数据库管理系统,它提供了强大的功能和性能。本文将介绍如何使用Node.js连接MySQL数据库,并展示一些常见的操作示例。

开始

在这里我们将使用 Node.js 的 mysql2 库来连接MySQL数据库。mysql2是一个高性能的MySQL驱动程序,提供了简单而灵活的API,使得在Node.js应用程序中执行数据库操作变得更加容易。

GitHub

安装:

npm install mysql2 --save

接下来我们对 mysql2 库进行简单的封装,以便我们接下来的操作。

import mysql, { FieldPacket, OkPacket, PoolOptions, QueryError, ResultSetHeader, RowDataPacket } from "mysql2";

const poolConfig: PoolOptions = {
  host: "localhost",
  user: "root",
  password: "123456",
  port: 3306,
  database: "test",
  waitForConnections: true,
  connectionLimit: 3,
  queueLimit: 0,
};

export const pool = mysql.createPool(poolConfig);

interface QueryResult {
  status: string;
  error: QueryError;
  result: RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[] | ResultSetHeader;
  fields: FieldPacket[];
}

interface PromisePoolQueryFn {
  (sql: string, val?: Array<string | number | boolean|object> | object[]): Promise<QueryResult>;
}

interface PromisePool {
  query: PromisePoolQueryFn;
}

export const promisePoolQuery: PromisePoolQueryFn = (sql, val) => {
  return new Promise((resolve) => {
    pool.query(sql, val, (err: QueryError, results: RowDataPacket[], fields: FieldPacket[]): void => {
      const result: QueryResult = {
        status: "ok",
        error: err,
        result: results,
        fields: fields,
      };
      if (err) {
        result.status = "err";
        resolve(result);
      } else {
        resolve(result);
      }
    });
  });
};

export const promisePool: PromisePool = {
  query: promisePoolQuery,
};

pool.query("SELECT 1", function (err: QueryError, results: RowDataPacket, fields: FieldPacket[]) {
  if (err) {
    console.log(`数据库连接失败:${err}`);
  }
  console.log("数据库连接成功");
});

export { QueryError, RowDataPacket, FieldPacket };
import express, { Request, Response, NextFunction, query } from "express";
import { check, ValidationChain, validationResult } from "express-validator";
import { pool, promisePool, QueryError, RowDataPacket, FieldPacket } from "../../controllers/mysql";

export const router = express.Router();

//过滤器
router.all("*", async (req: Request, res: Response, next: NextFunction) => {
  next();
});

router.post("/", validateUserCreate, async function (req: Request, res: Response) {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    console.log(errors);
    return res.status(400).json({ errors: errors.array() });
  }
  const sql = `INSERT INTO users SET ?`;
  const { age, name, address } = req.body;
  const sqlParams = [{ age, name, address }];
  const result = await promisePool.query(sql, sqlParams);
  console.log(result);
  res.send("ok");
});

当使用mysql2库执行增删改查(CRUD)操作时,可以按照以下示例来编写sql语句:

'INSERT INTO your_table SET ?'

'DELETE FROM your_table WHERE id = ?'

'UPDATE your_table SET ? WHERE id = ?'

'SELECT * FROM your_table WHERE id = ?'

标签:Node,RowDataPacket,mysql2,const,err,js,result,MySQL
From: https://www.cnblogs.com/mydyxy/p/17454377.html

相关文章

  • I/O密集型应用模型 数据密集型应用 Node对CPU密集型的场景不够友好
    语雀https://help.aliyun.com/document_detail/193189.html更新时间:2022-11-2818:16产品详情相关技术圈 我的收藏本文介绍如何通过函数计算,解决语雀CPU密集场景下,进程被阻塞等问题。客户介绍语雀是一个专业的云端知识库,用于团队的文档协作。现在已经是阿里巴......
  • c# xml、json相互转换
    stringjsonString="{\"Table\":{\"Row\":[{\"Name\":\"张三\",\"Age\":\"20\"},{\"Name\":\"李四\",\"Age\":\"25\"}]}}";......
  • MySQL数据库复制技术2
    一:复制的概念。    可能很多人认为,复制很简单就是把之前的数据直接转移到新的数据库当中不就是复制吗。但是在MySQL数据库中:复制指的就是复制一个服务器上(称为主节点服务器或者简称主节点)的所有改变到另一个服务器(称为从节点服务器或简称从节点)。复制通常用来创建主节点的一......
  • WSL 安装配置 MySQL
    在WSL安装并配置MySQL与在UbuntuServer安装配置MySQL一样的步骤。简要记录一下配置的过程。安装MySQL参考微软官方文档[1]安装MySQL。sudoaptinstall-ymysql-server启动MySQLServer:sudoservicemysqlstart登录mysql:sudomysqlmysql_secure_instal......
  • json结构比较问题
    两个json字符串结构一样,但是单纯比较字符串不一样解决:fastjson2这个依赖亲测直接equals方法就可以比较出来,但是json得要JSON.parseObject或者parseArrary解析出来的对象,如果是自己造的对象,可以先转字符串再转对象......
  • 面试题:如何理解 JS的异步?
    JS是一门单线程的语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个而渲染主线程承担着诸多的工作,渲染页面、执行JS都在其中运行。如果使用同步的方式,就极有可能导致主线程产生阻塞,从而导致消息队列中的很多其他任务无法得到执行。这样一来,一方面会导致繁忙的主线......
  • 时间戳转化“刚刚”、“几小时前”、“几天前”、“几周前”等形式的js代码片段
    代码片段(可用于vue过滤器)functiongetTimeStr(timestamp){ constnow=newDate(); constdate=newDate(timestamp); constdiff=(now-date)/1000;//毫秒转换为秒 if(diff<60){   return"刚刚"; }elseif(diff<3600){   returnMath.f......
  • 关于MySQL数据库的索引的作用及如何创建?
    一、创建索引的作用?原因:创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分......
  • nodejs使用eggjs创建项目,接入influxdb完成单表增删改查
    转载请注明出处:1.Eggjs特性:Eggjs是Node.js服务端应用开发框架,它提供了一套约定,使开发者能够快速搭建、开发和部署应用。以下是Egg.js的一些特性和作用:框架内置了基于约定的目录结构、约定的扩展机制和一些常用的插件,可以帮助开发者快速搭建应用。Egg.js遵循MVC......
  • 深度解析JSTL标签库
    1. 什么是JSTL标签库?  53  - Java Standard Tag Lib(Java标准的标签库)  - JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。  - 标签是写在JSP当中的,但实际上最终还是要执行对应的java程序。(java程序在jar包当中。)2. 使用JSTL标签库的步骤:532.1......