当前位置: 首页 > news >正文

做网站用win还是li360排名优化工具

做网站用win还是li,360排名优化工具,企业网站建设免费,网站仿此封装适合于使用 SQL 直接操作数据库的小型后端项目,更多功能请查阅MySQL2官网 // 代码保存到单独的 js 文件const mysql require(mysql2/promise)const debug true let conn/*** 执行 SQL 语句* param {String} sql* param {*} params* returns {Array}*/ const…

此封装适合于使用 SQL 直接操作数据库的小型后端项目,更多功能请查阅MySQL2官网

// 代码保存到单独的 js 文件const mysql = require('mysql2/promise')const debug = true
let conn/*** 执行 SQL 语句* @param {String} sql* @param {*} params* @returns {Array}*/
const query = (sql, params)=> {if(!conn)  throw Error(`数据库连接未创建,请配置 useDB、dbName 属性...`)debug && console.debug("[SQL]", sql, "[PARAMS]",Array.isArray(params)?params[0]:(params||"(无)"))return conn.query(sql, params)
}exports.query = query/*** 创建 mysql 连接(使用连接池)* @param {import('.').ServerConfig} config* @returns*/
exports.mysqlBuilder = async config=> {if(!!conn)  returnconn = mysql.createPool({host: config.host || 'localhost',port: config.port || 3306,user: config.user || 'root',password: config.pwd || '',database: config.database,waitForConnections: true,connectionLimit: 10,idleTimeout: 180 * 1000,enableKeepAlive: true,keepAliveInitialDelay: 0})return conn
}/*** 返回指定的sql结果数量* @param {String} table - 表名* @param {String} condition - 条件 SQL* @returns {Number}*/
exports.count = async (table, condition, params) => {let [ results ] = await query(`SELECT COUNT(*) FROM ${table} WHERE ${condition}`, params)return Number(results[0])
}/*** 按 ID 查询数据(单条)* @param {String} id* @param {String} table* @param {String} idField - ID字段名,默认 id* @returns {Object}*/
exports.findById= async (id, table, idField="id")=>{let [ results ] = await query(`SELECT * FROM ${table} WHERE ${idField}=? LIMIT 1`, id)return results[0]
}/*** 保存数据到指定表* @param {Object} obj - 待保存对象(默认取全部的字段,排除_开头)* @param {String} table - 表名* @param {Array<String>} ignores - 忽略的字段* @returns*/
exports.saveObjToTable = async (obj, table, ignores=[])=>{let fields = Object.keys(obj).filter(k=> !(k.startsWith("_")  || ignores.includes(k)))let [ results ] = await query(`INSERT INTO ${table} (${fields.join(",")}) VALUES (${fields.map(v=>'?').join(",")})`, fields.map(v=> obj[v]))return results
}/*** 将对象保存到指定数据表* @param {Object} obj - 待保存对象(默认取全部的字段,排除_开头)* @param {String} table - 表名* @param {String} idField - 主键字段名* @param {Array<String>} ignores - 忽略的字段* @returns*/
exports.updateObjToTable = async (obj, table, idField="id", ignores=[])=>{let fields = Object.keys(obj).filter(k=> !(k!=idField, k.startsWith("_")  || ignores.includes(k) || obj[k]===undefined))let [ results ] = await query(`UPDATE ${table} set ${fields.map(f=>`${f}=?`).join(",")} WHERE ${idField}=?`,fields.concat(idField).map(v=> obj[v]))return results
}/*** 将对象的某个字段进行 JSON 处理* @param {Object} obj - 待处理对象* @param {Array<String>} fields - 待转换的属性清单* @param {Boolean} toString - 转换为字符串,false=反序列到JSON对象*/
exports.dealJSONField = (obj, fields, toString = true)=> {if(typeof(obj) == 'object'){fields.filter(k=> k in obj).forEach(k=> obj[k] = toString ? JSON.stringify(obj[k]) : JSON.parse(obj[k]))}return obj
}

如何使用

const { mysqlBuilder, query } = require("basic/server/mysql")await mysqlBuilder({ host:"localhost", database:"test", user:"root" })let [ results ] = await query(`这里填写 SQL 语句`)
console.info(results )
// 更多语法请参考官方文档 https://sidorares.github.io/node-mysql2/docs
http://www.ds6.com.cn/news/28354.html

相关文章:

  • 跟建设通一样的网站wp博客seo插件
  • 做网站需要跟客户了解什么软件免费python在线网站
  • 网站建设案例分享微信加精准客源软件
  • 顺飞网站建设怎么样北京seo培训机构
  • 广州11个区繁华排名济南seo网站排名关键词优化
  • 教学资源网站建设设计宁波网站seo哪家好
  • 祥云县外卖哪个网站厦门人才网官网招聘
  • 找做金融的网站seminar什么意思中文
  • 网站系统安全保护等级是必须做的网络销售挣钱吗
  • 国外做展台搭建的设计网站泉州seo代理商
  • 建网站域名后怎样做手机百度ai入口
  • 跨境电商网站系统开发人工智能培训机构
  • 广州新冠最新情况app搜索优化
  • 绿化效果图怎么制作seo顾问是干什么
  • 邢台做网站服务商最新域名查询
  • 网站建设在哪个软件下做杭州seo技术
  • 不同网站建设报价单韩国热搜榜
  • 兰州迅豹网络怎么样网站用户体验优化
  • 可以做puzzle的网站大连网站建设
  • ps如何做音乐网站百度查重软件
  • 做直播信号网站搜索词排行榜
  • 什么网站做简历最好百度指数是啥
  • 网站建设公司自贡竞价如何屏蔽恶意点击
  • 电子商务网站建设的规章制度手机app安装下载
  • 开放一个网站多少钱店铺运营
  • 天津黄页企业名录引擎优化seo
  • 帮人做图挣外快的网站上海推广系统
  • 云主机建站营销策略有哪些方面
  • 贵阳58同城做网站公司有哪些网站排名靠前方法
  • 网站建设参考文献英文书籍现在什么网络推广好