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

网站建设方案案例wordpress视频解析

网站建设方案案例,wordpress视频解析,学手机网站建设,中铁建设集团有限公司是国企吗SQL Server是微软的一款关系型数据库。某些平台吹得天花烂坠#xff0c;今天第一次在自己的项目中使用了下#xff0c;感觉不是那么好#xff0c;特别是SQL语句的支持度还是很欠缺#xff0c;如limit等都不支持#xff0c;还有特别单双引号都是需要特别注意的,下面是SQL S…SQL Server是微软的一款关系型数据库。某些平台吹得天花烂坠今天第一次在自己的项目中使用了下感觉不是那么好特别是SQL语句的支持度还是很欠缺如limit等都不支持还有特别单双引号都是需要特别注意的,下面是SQL Server的安装和使用总结 SQL Server安装 1.到官网下载下载器https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 如图 2.新建一个文件夹并将下载好的下载器移动到这个文件夹中可以不新建个人习惯将软件归类管理但是后面会发现微软的软件很多你是无法很好的管理因为它会不受控制的安装到C盘去即使自定义了安装目录但是还是有很多文件是装到C盘去吐槽微软之后双击下载器后选中基本即可如 3.双击基本后会再次弹出一个许可协议接受后将安装路径修改为自己新建的文件夹之后点击安装继续如 4.看到下面界面表示数据库已经安装成功此时可以继续安装SSMSSSMS是一款数据库管理软件类似SQLyog但是没有SQLyog好用的数据库管理软件如 5.点击完SSMS后会跳到新的网页中去此时点击如图所示位置即可下载可视化管理软件如果需要中文可以继续到下面Available languages点击chinese即可安装中文版如 6.将下载好的SSMS下载器放到重新新建的文件夹之后双击并修改安装路径后继续点击install进行下载安装如 7.安装完成后点击Close即可点击完CLose后此时桌面可能没有快捷方式此时你可以到自己应用中找到名为azuredatastudio.exe的程序之后双击即可通过文件所在位置可以看到文件是安装在了C盘我C盘坚决不安装与系统相关的软件因此我会将整个文件剪切到其它盘之后创建快捷方式打开管理软件如下类似编辑器如果想要更可视化的管理数据库那么还得继续选择其中的工具 其中的工具如 **node.js中使用SQL Server ** node.js中使用SQL Server可以通过第三方包mssql,类似node.js连接mysql的包mysql一样我项目中涉及分库分表存储数据下面我将我项目中主要代码粘贴如下可供参考 配置默认数据库默认数据库用来查询项目基础数据文件命名为mssqldefaultconfig.js // 默认数据库配置 // 引入前先: npm i mssql 下载依赖包 const mssql require(mssql) // 默认数据库配置 const option {// sql server数据库所在服务器server: ***.**.***.***, // sql server数据库监听的端口号默认1433port: ****,// sql server数据库某个数据库名称database: ********2021,// 用户名user: ******,// 密码password: *********,options: {encrypt: false, //加密enableArithAbort: false},pool: {min: 0,max: 10,idleTimeoutMillis: 3000} }// 创建默认数据库连接池 const pool new mssql.ConnectionPool(option) pool.on(error, err {console.log(数据库连接错误: , err) }) // 连接数据库 const connection pool.connect()// 封装一个执行sql语句的方法用来操作数据库 const defaultDataBaseQuery async (sql, callBack) { const ps new mssql.PreparedStatement(await connection)ps.prepare(sql, err { if (err){ console.log(prepare错误: err)return} ps.execute(, (err, result) { if (err){ console.log(execute错误: err)return} ps.unprepare(err { if (err){ console.log(unprepare错误: err)callBack(err, null)return} callBack(err, result)})})}) }// 导出默认数据库 module.exports defaultDataBaseQuery配置动态数据库 动态数据库是指按规定的日期自动切换到某个数据文件命名为mssqlswitchconfig.js // 动态库配置 const mssql require(mssql) // 定时事务一个第三方的包类似定时器可以设置某段代码多久执行一次某个日期点执行某段代码 const schedule require(node-schedule) // 引入默认数据库配置动态库切换也是需要借助基础库的因此需要引入基础库 const defaultDataBaseQuery require(./mssqldefaultconfig)// 导出一个动态的数据库配置按年份配置数据库 function createSqlServeOption() {let date new Date()let yearstr date.getFullYear()// 动态数据库配置let optionObj {server: ***.**.***.***, port: ****,// 动态库命名最方便的就是前缀固定后缀年份等database: ****** yearstr,user: *****,password: ************,options: {encrypt: false, //加密enableArithAbort: false},pool: {min: 0,max: 10,idleTimeoutMillis: 3000}}return optionObj }// 程序启动配置当前年份动态库option let option createSqlServeOption() // 数据库连接变量 let pool;// 程序启动连接当前年份动态库 pool new mssql.ConnectionPool(option)// 每年1月1日自动切换到最新数据库 schedule.scheduleJob(0 0 0 1 1 *, function () {const date new Date()const yearstr date.getFullYear()let dbStr ****** yearstr// 降低频率切换因为此项目为老项目二开数据库中数据和数据结构都是不动的只提供使用权这里动态创建新的数据库业务不在我项目所以我无法创建数据库且不确定新的数据库是否已经创建好因此只能不断的查询新的数据库是否存在如果存在立马切换到新的数据库否则持续每次降低频率的尝试查询数据库是否存在let count 0// 如果新的一年数据库创建了那么立马切换到新创建的数据库否则延迟递归切换function switchDB () {// SQL Server中无法使用SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema ******yearstr此sql语句查询某个数据库中是否有某表只能通过下面数据查询到所有数据库然后去判断数据库中是否有新的数据库名称let sql select * From master.dbo.sysdatabasesdefaultDataBaseQuery(sql,async (error,result) {try {if (error) {throw error} else {const isExist result.recordset.find(item item.name dbStr) // 不存在是返回undefinedif (isExist) {option.database dbStr// 动态切换新的数据库连接如果将new mssql.ConnectionPool(option)提到最外面这里我不能保证它会重新创建新连接为了确保期间我在这里重新创建一次pool new mssql.ConnectionPool(option)// 存在的情况下return掉否则继续延迟尝试切换return} else {// 延迟重新判断是否存在数据库setTimeout(() {countswitchDB()},1000 * count)}}} catch (err) {console.log(查询新创建数据库是否存在失败 err)}})}switchDB() })// 连接池创建错误时 pool.on(error, err {console.log(数据库连接错误: , err) })// 创建数据库连接 const connection pool.connect()// 动态库查询方法 const switchDataBaseQuery async (sql, callBack) { const ps new mssql.PreparedStatement(await connection)ps.prepare(sql, err { if (err){ console.log(prepare错误: err)return} ps.execute(, (err, result) { if (err){ console.log(execute错误: err)return} ps.unprepare(err { if (err){ console.log(unprepare错误: err)callBack(err, null)return} callBack(err, result)})})}) }// 导出动态数据库 module.exports switchDataBaseQuery 查询页api接口路由文件 // 记录查询页// 引入日期格式化函数 const {dataFormat} require(../utils/utils) // 引入路由模块 const Router require(koa-router) // 引入默认数据库配置 const defaultDataBaseQuery require(../config/mssqldefaultconfig) // 引入动态数据库配置 const switchDataBaseQuery require(../config/mssqlswitchconfig) // 引入redis配置文件 const redisClient require(../config/redisconfig) // 创建路由实例 const router new Router({prefix:/api})//里面可接收一个对象可以设置些默认配置如{prefix:/api}设置路由匹配前缀// 在创建路由时默认加了前缀 /api 下面router.post(/login, (){})可直接匹配/api/login路由// 查实时值接口 router.post(/getrealtime,async (ctx, next) {let {id, ParaId} ctx.request.body// 设备单位等参数redis缓存keylet keys equipmentunit ParaIdreturn new Promise((resolve,reject) {// 查仪表相关配置参数function queryEquipOption() {// 判断是否存在key存在走缓存否则走数据库return new Promise((resolve,reject) {redisClient.exists(keys, (err, res) {if (res 0) {let sql1 SELECT Name,Unit,Xh FROM Equipment_Para_Two WHERE FId ParaId AND WeiXin1defaultDataBaseQuery(sql1, (error, result) {if (error) {ctx.body {cod: 201, msg: 查询错误!}console.log(查询实时值sql1错误: error)reject()} else {if (result.recordset.length 0) {ctx.body {cod: 200, msg: 无实时值!, resultList: [], time: dataFormat()}resolve()return}// 将查询到的数据存到redis中600秒过期redisClient.setex(keys, 60 * 10, JSON.stringify(result))resolve(result)}})} else {redisClient.get(keys, (error,res) {resolve(JSON.parse(res))})}})})}// 查实时值数据async function queryTimeData() {const option await queryEquipOption()// 要获取的通道const dnArray [...new Set(option.recordset.map(it D it.Xh))]// 要查询的通道值字段const dnStr dnArray.toString()// 查询时刻值let sql2 SELECT TOP 1 dnStr, SubTime FROM Equipment_Data WHERE EqId id order by id descswitchDataBaseQuery(sql2, (error, result) {if (error) {ctx.body {cod: 201, msg: 查询错误!}console.log(查询实时值sql2错误: error)} else {if (result.recordset.length 0) {ctx.body {cod: 200, msg: 无实时值!, resultList: [], time: dataFormat()}resolve()return}// 实时值数组let resultArray []option.recordset.forEach(item {resultArray.push({...item,...{value: result.recordset[0][D item[Xh]]}})})ctx.body {cod: 200, msg: 请求实时值数据成功!, resultList: resultArray, time: dataFormat(result.recordset[0].SubTime)}resolve()}})}queryTimeData()}) })// 查历史值接口 router.post(/gethistory, async (ctx, next) {const {date1, date2, ParaId, id, page} ctx.request.bodyconst startYear date1.slice(0,4)const endYear date2.slice(0,4)if (startYear ! endYear) {ctx.body {cod: 200, msg: 日期不能跨年!, resultList: []}return}// 设备单位等参数redis缓存keylet keys equipmentunit ParaIdreturn new Promise((resolve, reject) {// 查仪表相关配置参数function queryEquipOption() {// 判断是否存在key存在走缓存否则走数据库return new Promise((resolve,reject) {redisClient.exists(keys, (err, res) {if (res 0) {let sql1 SELECT Name,Unit,Xh FROM Equipment_Para_Two WHERE FId ParaId AND WeiXin1defaultDataBaseQuery(sql1, (error, result) {if (error) {ctx.body {cod: 201, msg: 查询错误!}console.log(查询实时值sql1错误: error)reject()} else {if (result.recordset.length 0) {ctx.body {cod: 200, msg: 无实时值!, resultList: []}resolve()return}// 将查询到的数据存到redis中600秒过期redisClient.setex(keys, 60 * 10, JSON.stringify(result))resolve(result)}})} else {redisClient.get(keys, (error,res) {resolve(JSON.parse(res))})}})})}// 查历史值数据async function queryHistoryData() {const option await queryEquipOption()// 要获取的通道const dnArray [...new Set(option.recordset.map(it D it.Xh))]// 要查询的通道值字段const dnStr dnArray.toString()if (page 1) {ctx.body {cod: 200, msg: 页数无效!, resultList: []}return}let skip (page - 1)*10// 查询历史值const date new Date()const currentYear date.getFullYear()let sql2;// 如果查询日期是当前年份则执行当前年份动态库否则切换到对应的历史数据库查询数据if (startYear currentYear) {sql2 select top 10 dnStr ,SubTime,EqId from (select row_number() over(order by id desc) as rownumber, dnStr ,SubTime,EqId from Equipment_Data) temp_row where EqId id and SubTime between date1 and date2 and rownumber skip} else {sql2 select top 10 dnStr ,SubTime,EqId from (select row_number() over(order by id desc) as rownumber, dnStr ,SubTime,EqId from [YLinKstartYear].[dbo].[Equipment_Data]) temp_row where EqId id and SubTime between date1 and date2 and rownumber skip}switchDataBaseQuery(sql2, (error, result) {if (error) {ctx.body {cod: 201, msg: 查询错误!}console.log(查询历史值sql2错误: error)} else {if (result.recordset.length 0) {ctx.body {cod: 200, msg: 无历史值!, resultList: []}resolve()return}// 历史值数组let resultArray []// 遍历历史值result.recordset.forEach(item {// 二维数组子数组let arr []// 遍历单位数组option.recordset.forEach(uitem {// 遍历历史值对象for (key in item) {if (key.slice(1,2) uitem.Xh) {arr.push({...uitem,value:item[key]})}}})resultArray.push({time: dataFormat(item.SubTime), ValueArray: arr})})ctx.body {cod: 200, msg: 请求历史值数据成功!, resultList: resultArray}resolve()}})}queryHistoryData()}) })// 查充值记录接口 router.post(/getpayrec, async (ctx, next) {const {date1, date2, id, page} ctx.request.bodyreturn new Promise((resolve,reject) {// 查询充值记录if (page 1) {ctx.body {cod: 200, msg: 页数无效!, resultList: []}resolve()return}let skip (page - 1) * 10let sql select top 10 EquipmentId,SbTime,No,Amount from (select row_number() over(order by id desc) as rownumber,EquipmentId,SbTime,No,Amount from PayRec) temp_row where EquipmentId id and SbTime between date1 and date2 and rownumber skipdefaultDataBaseQuery(sql, (error, result) {if (error) {ctx.body {cod: 201, msg: 查询错误!}console.log(查充值记录sql错误: error)} else {result.recordset.map(item {item.SbTime dataFormat(item.SbTime)})ctx.body {cod: 200, msg: 请求充值记录数据成功!, resultList: result.recordset}resolve()}})}) })// 退款记录接口 router.post(/getrefund, async (ctx, next) {const {date1, date2, id, page} ctx.request.bodyreturn new Promise((resolve,reject) {// 查询退款记录if (page 1) {ctx.body {cod: 200, msg: 页数无效!, resultList: []}resolve()return}let skip (page - 1) * 10let sql select top 10 EquipmentId,SbTime,No,Amount from (select row_number() over(order by id desc) as rownumber,EquipmentId,SbTime,No,Amount from Refund) temp_row where EquipmentId id and SbTime between date1 and date2 and rownumber skipdefaultDataBaseQuery(sql, (error, result) {if (error) {ctx.body {cod: 201, msg: 查询错误!}console.log(查退款记录sql错误: error)} else {result.recordset.map(item {item.SbTime dataFormat(item.SbTime)})ctx.body {cod: 200, msg: 请求退款记录数据成功!, resultList: result.recordset}resolve()}})}) })// 导出路由 module.exports routerindex启动文件 // 引入设置响应头的中间件 const setResponseHeader require(./middelware/setresponseheader) // 引入解析请求体的中间件koa-bodyparser const bodyParser require(koa-bodyparser) // 导入查询页路由文件 const recordqueryserve require(./serves/recordqueryserve)const Koa require(koa) // 创建Koa实例对象 const app new Koa()// 挂载设置响应头的中间件 app.use(setResponseHeader) // 挂载koa-bodyparser中间件如果不配置的话在路由页就不能通过ctx.request.body拿到请求体 app.use(bodyParser())// 挂载查询页接口路由 app.use(recordqueryserve.routes())// 绑定端口号 app.listen(3000,() {console.log(serve is running at 3000!) })提示本文图片等素材来源于网络若有侵权请发邮件至邮箱810665436qq.com联系笔者 删除。 笔者苦海
http://www.zqtcl.cn/news/103460/

相关文章:

  • 个人网站网页设计模板学校ftp服务器做网站
  • 黄江网站建设外贸公司用的采购储运财务软件
  • 优化网站公司做网站建设
  • 门户网站的盈利模式网站建设中备案
  • 代码需求网站织梦怎么关闭网站
  • 浙江工信部网站备案查询东圃做网站
  • icp网站域名怎么填写官方网站建设银行年利息是多少钱
  • 沈阳做网站好的信息流优化师证书
  • 做招聘网站创业seo优化工作
  • 如何维护网站建设外卖网站建设价钱
  • 南宁保洁网站建设乌克兰服装网站建设
  • ppt链接网站怎么做的nas云存储做视频网站
  • 上海网站制作公司联系方式设计素材网站照片
  • 林州网站建设价格网络舆情是什么意思
  • 网站外链平台的建设方法平台类型(至少5个)?兰州道路建设情况网站
  • 网站建立健全举报工作机制设计电子商务网站主页
  • 广州市建设工程交易服务中心网站沈阳百度推广哪家好
  • 个人网站备案需要什么网站建立的重要性
  • wordpress用户名西安seo代理计费
  • 网站建设前准备工作手机上传视频网站开发
  • 海口网站建设是什么意思wordpress推广码
  • 杭州市住房和城乡建设厅网站海南网站建设设计
  • 网站建设平台一般多少钱wordpress 本地上传服务器
  • 怎么给网站命名男女做羞羞羞的网站
  • 北京响应式网站建设公司信息流推广方式
  • 一级a做爰片迅雷网站微分销系统定制开发
  • 山东网站建设工作室网页设计全部代码
  • 用c 做网站可以吗注册网站什么要求
  • 销售网站排名销售型网站模板
  • wordpress 汽车宁波seo整体优化