目录
介绍
安装环境及数据准备
代码示例
mysql连接工具类
测试方法文件
单表总量查询
单表条件查询
新增数据
修改
删除
编辑 编辑
联表查询
联表过滤
搭配express服务搭建api使用
介绍
在前端开发中,可以使用纯node前端进行服务搭建与mysql进行数据库的交互,这样可以省略掉后台开发的权重
安装环境及数据准备
电脑需具备nodejs环境
安装必需模块
npm install mysql
npm install mysql2
mysql和mysql2都是Node.js中的MySQL数据库驱动程序,但它们有一些区别和各自的优点。
区别:
-
API:mysql2的API比mysql更简单,更易于使用,同时也支持更多的功能。
-
性能:mysql2相比mysql更快,因为它采用了更高效的协议和更好的连接池实现。
-
兼容性:mysql2兼容mysql,因此您可以在不需要更改代码的情况下将其替换为mysql。
优点:
-
mysql的优点:mysql是一个稳定的和广泛使用的驱动程序,具有丰富的文档和社区支持。
-
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访问:
这样只有前端的服务接口就搭建好了(*^▽^*) ヾ(@^▽^@)ノ