之前做了一个功能,要求使用js代码,在客户端开启一个定时任务,连接数据库获取数据传递到后台,完成数据同步,以前都不知道,居然用js代码也可以连接数据库,下面代码只需要将数据库表名等地方替换成自己的,还有执行的sql等,数据的名字等等,都换成自己的就可以使用;使用的方法也很简单,只要:
在cmd中找到node.js文件的位置
输入node 文件名.js;就可以进行测试效果了,后期使用的话封装成一个方法搬到项目中就行了
自己看看代码,需要替换的地方都用中文注明了
function syncDataEvent () {
// 在读取数据的外部创建定时任务
// 引用node-schedule 模块
const schedule = require('node-schedule')
// 导入express模块
const express = require('express')
var req = require('request')
const chalk = require('chalk')
const axios = require('axios')
const https = require('https')
// 实例化一个express对象
const app = express()
// 定义定时规则
const rule = new schedule.RecurrenceRule()
// 每分钟的0秒执行
// rule.second = 0;
// 下面几种定时规则可自行选择
// 每小时的几分执行
// rule.minute = 11;
// 每隔 10 秒执行一次
rule.second = [0, 10, 20, 30, 40, 50]
// rule.date = [1];//每月1号
// rule.dayOfWeek = [1,3,5];每周一、周三、周五
// rule.hour = [0,12]; // 每天0点和12点开始推送
// rule.minute = [0,5,10,15,20,25,30,35,40,45,50,55]; // 每隔 5 分钟执行一次
// 启动任务
const job = schedule.scheduleJob(rule, () => {
console.log(new Date())
dbConnection()
})
function dbConnection () {
// 引用mysql
var mysql = require('mysql')
// 建立与数据库流水表的连接
var connection = mysql.createConnection({
host: '数据库名',
user: '用户名',
password: '密码',
database: '表名'
})
// 创建待同步表的连接
var connection1 = mysql.createConnection({
host: '数据库名',
user: '用户名',
password: '密码',
database: '表名'
})
// 执行数据库连接
connection.connect()
var sqlstring = ''
var sqlstring1 = ''
let rs = ''
// 查询数据 注意,由于没有最新数据,所以先使用最旧的数据
sqlstring1 = "执行的sql语句"
// 执行下面的方法,如果成功则返回result查询结果集,如果执行失败,则返回错误信息并停止
console.log(sqlstring1)
connection1.query(sqlstring1, function (err, result) {
if (err) {
console.log('[SELECT ERROR] - ', err.message)
return
}
rs = JSON.stringify(result)
console.log('str' + rs)
// 对查到的结果进行分割
rs = rs.replace('[', '')
rs = rs.replace(']', '')
console.log('parse' + rs)
rs = JSON.parse(rs)
// 此处应该写连接后台的代码,将查到的数据传递到后台,前端的任务就是完成了
// 对时间格式进行转换
// rs = new Date(rs);
// let currDate = dayjs(rs).format('YYYY-MM-DD HH:mm:ss');
// console.log('傻子',sd.format(new Date(rs), 'YYYY-MM-DD HH:mm:ss'));
// 下句是发送响应数据 response 不能重复,而定时任务会重复执行,所以先注释
// sqlstring = "执行的sql语句";
const times = rs.create_time
console.log('---times---', times)
// sqlstring = "select sinopecnodeno,macno,ttc,cardno,machineoilno,oilno,takedate,ctc,oilgunno,openo,liter,price,amount,balance,pumpno,tac,gmac,psam_tac,psam_asn,terminalno,psam_ttc,moneysou,paymode,payunit,t_mac,accountdate,tracode,gettime,key_version,key_index from sm_oilvouch where takedate > '"+times+"' ORDER BY takedate desc";
sqlstring = "执行的sql语句"
console.log(sqlstring)
connection.query(sqlstring, function (err, result1) {
if (err) {
console.log('[SELECT ERROR] - ', err.message)
return
}
const list = JSON.stringify(result1)
console.log('查询的结果-------------', list)
// 发送请求
req.post({ url: '数据传输的后台地址', formData: { list: list } }, function optionalCallback (err, httpResponse, body) {
// body为url反馈回来的数据,
})
})
// response.end(rs);
// 断开数据库连接
connection.end()
connection1.end()
})
}
}