nodejs实现,每天定时自动读取数据库数据-生成excel表格-发送给老板邮箱

58 篇文章 16 订阅
57 篇文章 34 订阅

-- 需要的工具

数据库    mysql
生成excel表格   node-xlsx

-- 安装模块

我在F盘建立了一个文件夹 : automation
npm install mysql
npm install node-schedule
npm install node-xlsx
npm install nodemailer
npm install async

-- 封装3个方法

1.访问数据库
2.发送邮件
3.格式化时间

mysql.js
/*
工具类
2016年8月5日16:47:04
 */

var db    = {};  
var mysql = require('mysql');  
var nodemailer = require('nodemailer');
var pool  = mysql.createPool({  
  connectionLimit : 10,  
  host            : 'localhost',  
  user            : 'root',  
  password        : '123456',  
  database        : 'nodejs'  
});  

//执行sql语句并返回结果  
db.query = function(sql, callback){  
  
    if (!sql) {  
        callback();  
        return;  
    }  
    pool.query(sql, function(err, rows, fields) {  
      if (err) {  
        console.log(err);  
        callback(err, null);  
        return;  
      };  
  
      callback(null, rows, fields);  
    });  
};

//发送邮件,带附件
db.sendMail = function (xlsxname, callback) {

  var transporter = nodemailer.createTransport({
    service: 'qq',
    auth: {
      user: '452076103@qq.com',
      pass: 'drckgvaniifuxxxx'   
    }
  });

  var mailOptions = {
    from: '452076103@qq.com', //你的邮箱
    to: `527828938@qq.com`, //你老板的邮箱
    subject: '老板,您要的excel来了,格式您自己处理下!', 
    html: `<h2>我发誓,我是手动导出的</h2>` ,
    attachments:[{
    	filename : xlsxname,
    	path : `./${xlsxname}`
    }]
  };

  transporter.sendMail(mailOptions, function (error, info) {
    if (error) {
      callback(error,null);
    }else{
      callback(null,info);
    }
  });
}

//格式化当前时间
db.nowDate = function(){
	var date = new Date();
	var fmtTwo = function (number) {
    return (number < 10 ? '0' : '') + number;
  }
 	var yyyy = date.getFullYear();
  var MM = fmtTwo(date.getMonth() + 1);
  var dd = fmtTwo(date.getDate());

  var HH = fmtTwo(date.getHours());
  var mm = fmtTwo(date.getMinutes());
  var ss = fmtTwo(date.getSeconds());

  return '' + yyyy + '-' + MM + '-' + dd + ' ' + HH + ':' + mm + ':' + ss;

}  
module.exports = db; 

-- 测试

automation.js
var async = require('async');
var xlsx = require('node-xlsx');
var schedule = require("node-schedule");
var mysql = require('./mysql');
var fs = require('fs');
var auto = function(){
	//查询数据,并转化成生成xlsx所需的格式
	var task1 = function(callback){
		mysql.query('select * from Users',function(err, rows, fields){
			if (err) {
				callback(err,null);
				return;
			}
			var datas = [];
			rows.forEach(function(row){
			var newRow = [];
				for(var key in row){
					newRow.push(row[key]);
				}
				datas.push(newRow);
			})
			callback(null, datas);
		})
	}

	//生成xlsx文件
	var task2 = function(datas, callback){
		var buffer = xlsx.build([{name: "今天的收入", data: datas}]);
		var xlsxname = `${mysql.nowDate().split(' ')[0]}.xlsx`;
		fs.writeFile(xlsxname, buffer, 'binary',function(err){
			if (err) {
				callback(err,null);
				return;
			}
			callback(null, xlsxname);
		})
	}

	//发送邮件,返回信息
	var task3 = function(xlsxname, callback){
		mysql.sendMail(xlsxname, function(err, info){
			if (err) {
				callback(err, null);
				return;
			}
			callback(null, info);
		})
	}

	async.waterfall([task1, task2 ,task3], function(err, result){
		if (err) {
			console.log(err);
			return;
		}
		console.log(result);
	})
}

var rule      = new schedule.RecurrenceRule();
var times     = [1,6,11,16,21,26,31,36,41,46,51,56];
rule.second   = times;
schedule.scheduleJob(rule, function(){
  auto();
});

文件夹结构:

为了看到效果,自动执行设置为5秒执行一次.

-- 运行

--------邮件------微笑

-----具体内容------微笑

--------打印信息--------微笑

-------数据库-------微笑

---------excel内容--------微笑
微笑微笑微笑微笑微笑就说6不6...
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要使用 Node.js 和数据库来渲染 art-template 模板,可以按照以下步骤操作: 1. 安装 Node.js 和相应的数据库驱动程序,比如 MySQL、MongoDB 或 PostgreSQL。 2. 在 Node.js 项目中安装 art-template 和数据库驱动程序的 Node.js 模块,可以使用 npm 命令安装,如下所示: ``` npm install art-template mysql --save ``` 3. 创建数据库连接,使用 Node.js 的数据库驱动程序连接数据库,如下所示: ```javascript const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'my_database' }); connection.connect(); ``` 4. 查询数据库,获取数据并将其传递给 art-template 进行渲染,如下所示: ```javascript const template = require('art-template'); connection.query('SELECT * FROM my_table', function (error, results, fields) { if (error) throw error; const html = template(__dirname + '/views/my_template.art', { data: results }); console.log(html); }); ``` 在此示例中,我们使用 `connection.query()` 方法查询数据库并获取结果。然后,我们将结果传递给 art-template 的 `template()` 方法进行渲染,同时也将模板文件的路径作为第一个参数传递给 `template()` 方法。 在渲染时,我们可以在模板中使用 `data` 变量来访问查询结果中的数据。 5. 关闭数据库连接,如下所示: ```javascript connection.end(); ``` 在 Node.js 中,数据库连接是异步的,因此在完成所有数据库操作后,应该关闭连接,以避免内存泄漏和其他问题。 这样就可以在 Node.js 中使用 art-template 和数据库渲染模板了。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值