node连接mysql以及防注入的手段

Others 2022-10-28 07:39:57 2022-10-28 07:39:57 829 次浏览

安装mysql

$ yarn add mysql

建立连接池、常用sql语句

// mysql.js
const mysql = require('mysql');
// 创建连接池
const pool = mysql.createPool({
    host: 'xxx.xx.xxx.xxx', // 服务器ip
    port: 3306, // mySql运行的端口号(默认3306)
    database: 'name', // 数据库名称
    user: 'user', // 数据库用户
    password: xxxx // 数据库密码
})
const query = (sql, values) => {
    return new Promise((resolve, reject) => {
        pool.getConnection(function (err, connection) {
            if (err) {
                reject(err)
            } else {
                connection.query(sql, values, (err, rows) => {
                    if (err) {
                        reject(err)
                    } else {
                        resolve(rows)
                    }
                    connection.release()
                })
            }
        })
    })
}

/**

  • 查询数据
  • @param {*} table 表名
  • @param {*} key 查询条件的Key
  • @returns list */ const findDataWhere = (table, word, key = 'id') => { const _sql = SELECT * FROM ?? WHERE ${key} =? return query(_sql, [table, word]) }

/**

  • 插入数据
  • @param {*} table 表名
  • @param {*} values 插入的值
  • @returns list */ const insertData = (table, values) => { const _sql = INSERT INTO ?? SET ? return query(_sql, [table, values]) }

/**

  • 更新数据
  • @param {*} table 表名
  • @param {*} values 插入的值
  • @param {*} word 查询条件的值
  • @param {*} key 查询条件的Key
  • @returns list */ const updateData = (table, values, word, key = 'id') => { const _sql = UPDATE ?? SET ? WHERE ${key} =? return query(_sql, [table, values, word]) }

/**

  • 删除数据
  • @param {*} table 表名
  • @param {*} word 查询条件的值
  • @param {*} key 查询条件的Key
  • @returns */ const deleteData = (table, word, key = "id") => { const _sql = DELETE FROM ?? WHERE ${key} =? return query(_sql, [table, word]) } module.exports = { query, insertData, updateData, deleteData, findDataWhere }

使用方法


		<h4 data-id="heading-3" style="font-size:14px;margin-top:30px;margin-bottom:10px;padding-left:24px;position:relative;color:#00325E;font-family:-apple-system, system-ui, &quot;white-space:normal;background-color:#FFFFFF;">
			<span style="font-weight:normal;">
// 控制层 article.js
const mySqlFun = require("./mysql")
/**
 * 获取标签列表(id倒序)带分页
 */
const findLabelListPage = async (ctx) => {
    let { pageIndex = 1, pageSize = 10, } = ctx.query
    let resData = {
        list: [],
        pageIndex: pageIndex,
        pageSize: pageSize,
    }
    const _sql = `SELECT * FROM ?? ORDER BY id DESC LIMIT ${(pageIndex - 1) * pageSize},${pageSize} `
    // 使用上面导出的query,第一个参数就是sql,第二个参数是数组,?? 和 ? 就是占位符对应的具体表名或参数
    let res = await mySqlFun.query(_sql, ['label'])
    if (res) {
       ...
    } else {
       ...
    }
}