express调用mysql中的封装过程

发布时间 2023-04-10 16:45:36作者: 明月下

我将express调用mysql分成了三个步骤

其中需要注意的是保障异步的等待环节,我这里使用了 mysql.createPool().promise() 和 async/await 。(注:.promise()方法需要mysql2)

1、首先是设置步骤,在/config/mysql.js中,连接数据库,并传入一个查询语句,返回一个回调const mysql = require ('mysql2')

// 这里为了方便连接不同的数据库,保留了database作为参数
const pool = (database) => mysql.createPool({
    host: '',
    user: '',
    password: '',
    database
  });
// 需要传入我们连接的数据库名称,查询语句和一个后续操作的回调函数
exports.executeQuery = async (database ,query, callback) => {
  console.log("mysql 语句", query)
  const promisePool = pool(database).promise()
  try {
// 使用async/await确保查询完毕再返回结果 const [rows, fields]
= await promisePool.query(query); console.log("config => rows:", rows)
// 记得关闭数据库连接 promisePool.end()
return callback(rows) } catch (error) { throw new Error(`查询失败:${error.message}`); } }

 2、第二步是模块步骤,/modules/database.js根据不同的请求生成不同的查询语句,同时也是在这一步指定需要查询的数据库

const { executeQuery } = require('../config/mysql')
const database =  'database'
exports.get = async(difficulty) => {
    console.log("查询排行榜数据")
    try {
    // 根据变量调整查询语句 const query
= `SELECT * from ranklist WHERE difficulty = ${difficulty} ORDER BY time ASC LIMIT 10;`
    // 回调函数一般就是return结果,别忘记这个函数调用也要return 和 await
return await executeQuery(database, query, (rows) => { console.log('callback', rows) return rows }) } catch (error) { console.error(error) throw error + ' 查询失败' } }

3、第三步则是路由上的设置,/routes/database.js中要这是请求方式和地址,同时处理请求和响应

const express = require('express')
let route = express.Router()
const databaseMoudle = require('../modules/database')
// 设置请求方式,path
route.post('/get',async (req,res) => { try {
    // 直接把参数传给modules const result
= await databaseMoudle.get(req.body.difficulty) console.log('result', result) const data = { code: 0, message: "成功获取难度"+ req.body.difficulty +"排行榜数据", data: result }
    // 处理响应,返回结果 res.status(
201).send(data) } catch (error) { console.error(error) res.status(500).send() } })

4、最后其实还有一步就是把database.js中的路由挂载到app上,这里我的做法是先在/routes/index.js中挂载各个database.js。然后在app.js中引用/routes/index.js

/routes/index.js
// 这里也可以采用自动化的方法读取文件
const database = require('./database')

module.exports = (app) => {
    app.use('/database',database)
}

app.js
// 引入路由
const routes = require('./routes')
routes(app)