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

使用 Node.js 连接 MySQL

时间:2024-04-03 18:25:02浏览次数:26  
标签:Node const err js result MySQL

使用 Node.js 连接 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,const,err,js,result,MySQL
From: https://www.cnblogs.com/sexintercourse/p/18113297

相关文章

  • RobotJS截取屏幕screen.capture踩坑
    RobotJS截取屏幕screen.capture踩坑 调用robot.screen.capture()或robot.screen.capture(0,0,1920,1080),返回的Bitmap对象是色彩格式是BGR色彩,这导致了如果未经处理就直接生成图像,色彩会产生错误,只需将BGR色彩转换成RGB色彩即可。constrobot=require('robotjs');con......
  • 使用NodeJS将数据保存成JSON文件
    使用NodeJS将数据保存成JSON文件 在平时我需要把后端一些object变量保存至本地,可以这样做:constexpress=require("express");constapp=express();constserver=require("http").createServer(app);constfs=require('fs');app.use(express.static("publ......
  • MySQL 中 GROUP_CONCAT() 用法
    GROUP_CONCAT是一种SQL聚合函数,用于将组内的多个值连接成一个字符串,并以指定的分隔符分隔这些值。在MySQL中,GROUP_CONCAT可以用于将多个行的值合并成一个字符串,并返回该字符串。以下是GROUP_CONCAT的基本语法:SELECTcolumn1,GROUP_CONCAT(column2SEPARATOR',')ASco......
  • Jmeter使用json提取器进行模糊提取的方法
    根据JsonPath的官方文档:GitHub-json-path/JsonPath:JavaJsonPathimplementation即下图:若需要对既有的json内容进行模糊匹配,需要使用以上多种方式,但是更建议使用正则匹配的方式。 $..results[?(@.name=~/.*CICD/i)].name表示对results中的name值为CICD结尾的内容进行......
  • MySQL 中模糊匹配
    1、like模糊匹配-单项常用通配符有两个:'%'百分号、'_'下划线。%:可以匹配0~多个字符_:只能匹配1个字符selectid,device_id,universityfromuser_profilewhere(universitylike'北京%'oruniversitylike'上海%')and(universitylike'%学院'orun......
  • node.js 代码执行时间的实现
    基础实现//记录开始时间varstartTime=performance.now();//要执行的代码for(leti=0;i<1000;i++){console.log("第"+(i+1)+"次循环");}//记录结束时间varendTime=performance.now();//计算执行时间varexecutionTime=endTime-startTi......
  • 基于springboot+vue+Mysql的招生管理系统
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示系统首页学生注册专业信息个人中心管理员登录管理员功能界面学生管理专业信息管理专业报名......
  • 06 MySQL数据操作DML---插入insert、删除delete、更新update、查询select
    DML是指数据操作语言,用来对数据库中表的数据记录进行更新插入insert向表中指定字段插入数据insertinto表名(字段名1,字段名2,字段名3,...)values(字段名1值,字段名2值,字段名3值,...)INSERTintomy_student(id,`name`,age)values(2,'Jack',12);字段列表不一定非要......
  • mysql-多表连接的学习
    --4.3--****************************************************************************************1.多表连接1.1为了避免笛卡尔积,可以在where中加入有效的连接条件SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.col......
  • mysql --聚合函数的学习
    聚合函数1.常见的聚合函数1.1AVG/SUM:只适用于数值类型的字段(或变量)1.2MAX/MIN:适用于数值类型、字符串类型、时间日期类型的字段(或变量)1.3COUNT1.3.1作用:计算指定字段在查询结构中出现的个数(不包含NULL值的)#如果计算表中有......