Node搭建前端服务Mysql数据库交互一篇搞定

目录

介绍

安装环境及数据准备

代码示例

   mysql连接工具类

测试方法文件

单表总量查询

 单表条件查询

新增数据

 修改

删除

​编辑 ​编辑

联表查询 

 联表过滤

 搭配express服务搭建api使用

介绍

在前端开发中,可以使用纯node前端进行服务搭建与mysql进行数据库的交互,这样可以省略掉后台开发的权重

安装环境及数据准备

电脑需具备nodejs环境

安装必需模块

npm install mysql

npm install mysql2

mysql和mysql2都是Node.js中的MySQL数据库驱动程序,但它们有一些区别和各自的优点。

区别:

  1. API:mysql2的API比mysql更简单,更易于使用,同时也支持更多的功能。

  2. 性能:mysql2相比mysql更快,因为它采用了更高效的协议和更好的连接池实现。

  3. 兼容性:mysql2兼容mysql,因此您可以在不需要更改代码的情况下将其替换为mysql。

优点:

  1. mysql的优点:mysql是一个稳定的和广泛使用的驱动程序,具有丰富的文档和社区支持。

  2. mysql2的优点:mysql2具有更好的性能和更简单的API,还支持Promise和async/await等现代JavaScript功能。

这里以mysql2为例

本地数据库表准备
准备两张表进行测试

 

代码示例

   mysql连接工具类

  新建自定义一个js文件

const mysql = require('mysql2/promise');
module.exports = {
    // 数据库配置
    config: {
      host: '127.0.0.1',
      port: '3306',
      user: 'root',
      password: '密码',
      database: '数据库名'
    },
  
    // 连接数据库 使用数据库连接池方式连接
    async sqlConnect(sql, sqlArr, callBack) {
      const connection = await mysql.createConnection({
        host: this.config.host,
        port: this.config.port,
        user: this.config.user,
        password: this.config.password,
        database: this.config.database,
        authPlugins: {
          mysql_clear_password: () => () => Buffer.from(this.config.password + '\0')
        }
      });
  
      try {
        console.log('数据库连接成功');
        const [rows, fields] = await connection.execute(sql, sqlArr);
        callBack(null, rows);
      } catch (err) {
        console.log('数据库连接失败', err);
        callBack(err, null);
      } finally {
        await connection.end();
      }
    }
  };

这个文件写后基本不需要再动了

测试方法文件

单表总量查询

测试:

 

 

 单表条件查询

 或者使用模板语法动态拼接条件属性

 排序分页等不再演示,直接拼接在sql后面即可

新增数据

 

 修改

 

删除

 

联表查询 

 

 联表过滤

查询出的数据都是集合形式,所以可以使用集合来接收查询到的数据,然后使用集合的过滤规则等方法实现过滤筛选

 搭配express服务搭建api使用

一般在开发中可以使用express搭建前端服务,然后通过服务的接口访问数据库

重新写一版工具类

const mysql = require('mysql2/promise');

module.exports = {
  // 数据库配置
  config: {
    host: '127.0.0.1',
    port: '3306',
    user: 'root',
    password: '密码',
    database: 'testmysql2'
  },

  // 连接数据库 使用数据库连接池方式连接
  async execute(sql, sqlParams) {
    const connection = await mysql.createConnection({
      host: this.config.host,
      port: this.config.port,
      user: this.config.user,
      password: this.config.password,
      database: this.config.database
    });

    try {
      console.log('数据库连接成功');
      const [rows, fields] = await connection.execute(sql, sqlParams);
      return { success: true, data: rows };
    } catch (err) {
      console.log('数据库连接失败', err);
      return { success: false, error: err };
    } finally {
      await connection.end();
    }
  }
};

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

const lianbiao = async (data) => {
  const sql = 'SELECT a.title, a.content, b.msg_type FROM `msg` a LEFT JOIN `msg_group` b ON a.code = b.type_code WHERE b.msg_type = ?';
  const sqlParams = [data];

  try {
    const result = await mysqlU.execute(sql, sqlParams);
    console.log('操作成功(返回值):', result);
    return result;
  } catch (error) {
    console.log('操作失败(错误信息):', error);
    throw error;
  }
}

module.exports = {
    lianbiao
};

 

//导入 express
const express = require('express')
    //导入自定义路由
const router = require('./myRouter')
//导入自定义测试mysql方法
const lianbiao = require('./tesymysql2/ceshi')
    //创建应用对象
const app = express();
//创建路由
app.get('/home', (req, res) => {
    // res.setHeader('content-type', 'text/html;charset=utf-8')
    // res.send('hello word 世界你a asda萨达好');
    res.json({
        name: "张飞",
        qun: '车骑将军'
    })
});
// 将相应路由绑定到 GET 请求上
app.get('/home/lianbiao/:data', async (req, res) => {
    try {
      const { data } = req.params;
      const result = await lianbiao.lianbiao(data);
      res.json({ success: true, result });
    } catch (error) {
      res.json({ success: false, message: error.message });
    }
  });

//应用自定义路由
app.use(router);
//监听端口 启动服务
app.listen(9000, () => {
    console.log('服务已启动');
})

测试:

访问9000/home

 访问接口/home/lianbiao/:data

 apipost访问:

这样只有前端的服务接口就搭建好了(*^▽^*) ヾ(@^▽^@)ノ

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值