Nodejs中读取中文文件编码问题、发送邮件和定时任务实例

  关于nodejs读取中文文件真是折腾了不少时间,网上各种方案,最后没有一个适用我,好在解决了。

  下面的三个知识点都是从项目中抽出的,要单独运行脚本的话需要用全局模式来安装模块,比如安装中文转换模块(后续其它的也需要这么做):

Nodejs中读取中文文件编码问题、发送邮件和定时任务实例

  

复制代码 代码如下:

  npm install -g iconv-lite

  npm install -g nodemailer

  npm install -g node-schedule

  1、nodejs读取中文文件编码问题

  准备一个文本文件(当然也可以是csv文件等)test.txt和text.csv,nodejs文件test.js如下:

  

复制代码 代码如下:

  var iconv = require('iconv-lite');

  var fs = require('fs');

  var fileStr = fs.readFileSync('D:\\test.csv', {encoding:'binary'});

  var buf = new Buffer(fileStr, 'binary');

  var str = iconv.decode(buf, 'GBK');

  console.log(str);

  直接读文件的话是乱码,不信你可以试试。需要先统一用二进制编码方式读取,然后再用GBK解码。运行结果如下:

Nodejs中读取中文文件编码问题、发送邮件和定时任务实例

  更多参见:iconv-lite

  2、nodejs发送邮件

  啥都不想说,直接上代码,简单易懂:

  

复制代码 代码如下:

  var nodemailer = require('nodemailer');

  //配置邮件

  var transporter = nodemailer.createTransport('SMTP',{

  service: '163qiye',

  auth: {

  user: '[email protected]',

  pass: '123456',

  }

  });

  //发送邮件

  var sendmail = function(html){

  var option = {

  from:"[email protected]",

  to:"[email protected],[email protected]",

  cc:'[email protected]'

  }

  option.subject = '我5年前制定的五年计划'

  option.html= html;

  transporter.sendMail(option, function(error, response){

  if(error){

  console.log("fail: " + error);

  }else{

  console.log("success: " + response.message);

  }

  });

  }

  //调用发送邮件

  sendmail("邮件内容:<br/>My goal for 2015 is to accomplish the goals of 2014 which I should have done in 2013 because I made a promise in 2012 & planned in 2011!");

  更多参见:nodemailer

  3、nodejs定时任务

  这个用法很多,如果熟悉linux crontab语法,这个就更简单了。我邹的这个例子很和谐,呵呵:

  

复制代码 代码如下:

  var schedule = require('node-schedule');

  /*方式一:

  指定某一个时间执行任务

  */

  var schedule = require('node-schedule');

  var date = new Date(2014, 12, 31, 16, 1, 0);

  var j = schedule.scheduleJob(date, function(){

  console.log('2015 will soon come.');

  });

  /*方式二:

  在每个小时的多少分钟执行

  */

  var rule = new schedule.RecurrenceRule();

  rule.minute = 1;

  var j = schedule.scheduleJob(rule, function(){

  console.log('I\'m very happy now!');

  });

  /*方式三:

  类似crontab

  */

  var j = schedule.scheduleJob('1 * * * *', function(){

  console.log('It\'s time to 下午茶!');

  });

  运行结果更和谐,呵呵:

Nodejs中读取中文文件编码问题、发送邮件和定时任务实例

  不要奇怪为什么第一个计划任务没有执行,因为这个是格林威治时间,它需要等8个小时后再执行。呵呵~~

  更多参见:node-schedule

  听了一天的悲伤的音乐,越听越开心。哈哈