關於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解碼。運行結果如下:
更多參見:iconv-lite
2、nodejs發送郵件
啥都不想說,直接上代碼,簡單易懂:
var nodemailer = require('nodemailer'); //配置郵件 var transporter = nodemailer.createTransport('SMTP',{ service: '163qiye', auth: { user: 'zhoujie0111@126.com', pass: '123456', } }); //發送郵件 var sendmail = function(html){ var option = { from:"zhoujie0111@126.com", to:"zhoujie0111@126.com,zhoujie0111@126.com", cc:'zhoujie0111@126.com' } 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 下午茶!'); });
運行結果更和諧,呵呵:
不要奇怪為什么第一個計划任務沒有執行,因為這個是格林威治時間,它需要等8個小時后再執行。呵呵~~
更多參見:node-schedule
聽了一天的悲傷的音樂,越聽越開心。哈哈