Node+fs+定時器(node-schedule)+MySql

來源:互聯網
上載者:User

標籤:

 

目標:將本人寫部落格時候的儲存到案頭的圖片    

        執行儲存到指定檔案進行整理

        並寫入資料庫

先看最終的目錄結構:

package.json檔案:

{  "name": "zqz",  "dependencies": {    "mysql": "^2.10.2",    "node-schedule": "^1.1.0"  }}

通過npm install node-schedule --save //--save的作用是將其加入package.json的dependencies(依賴項中)

 

2個依賴項:

node-schedule https://github.com/node-schedule/node-schedule 定時器

mysql https://github.com/felixge/node-mysql mysql

 

app.js檔案:

var schedule = require(‘node-schedule‘);var mysql = require(‘mysql‘);var fs = require(‘fs‘);const desktopPath = ‘C:/Users/Administrator/Desktop/‘;const targetPath = ‘F://Blog_ScreenShot//‘;const metaInfo = ‘blog‘;var operationType = {    0 : ‘插入‘,    1 : ‘刪除‘,    2 : ‘修改‘,    3 : ‘查詢‘}/** * 輪詢案頭 * @return {[type]} [description] */function timePoll(){    console.log(‘--------[開始輪詢]----------‘)    schedule.scheduleJob(‘30 * * * * *‘, function(){        visitDesk();          console.log(‘每分鐘的30s都會執行!:‘ + (new Date).toLocaleTimeString());    }); }/** * 訪問案頭 * @return {[type]} [description] */function visitDesk(){    console.log(‘--------開始訪問案頭----------‘)    fs.readdir(desktopPath,function(err, files){       if (err) {           return console.error(err);       }           files.forEach( function (file){              if(file && judgeImage(file)){                   saveImageToFile(file);              }else{                   console.log(‘案頭無資源!‘);                   return;              }           });    });}/** * 判斷檔案類型,取出我們需要的png圖片 * @return {[type]} [description] */function judgeImage(file){    var postfix = getPostfix(file);    if(postfix === ‘png‘ && file.indexOf(metaInfo) > -1){        return file;    }}function getPostfix(file){    var dotIndex = file.indexOf(‘.‘);    var fileLen = file.length;    return file.substring(dotIndex+1,fileLen);}/** * 將擷取的圖片存入 * pipe,它以用來把當前的可讀流和另外一個可寫流串連起來。可讀流中的資料會被自動寫入到可寫流中 * @return {[type]} [description] */function saveImageToFile(file){    var fileReadStream = fs.createReadStream(desktopPath + file);    var lastPath = targetPath + createDateFolder();    if(!isFolderHave(lastPath)){        createLastFloder(lastPath);    }    var fileWriteStream = fs.createWriteStream(lastPath + file);    fileReadStream.pipe(fileWriteStream);    fileWriteStream.on(‘close‘,function(){          console.log(‘複製成功!‘);          deleteDeskImage(file);          //寫入資料庫          connectMysql(file, lastPath, ‘0‘);    })}/** * 刪除案頭檔案 * @param  {[type]} file [description] * @return {[type]}      [description] */function deleteDeskImage(file){    fs.unlink(desktopPath + file, function(){        console.log(‘刪除成功!‘)    })}/** * 以系統時間建立檔案夾/年月日 * @return {[type]} [description] */function createDateFolder(){    var day = (new Date).getDate();    var month = (new Date).getMonth()+1;    var year = (new Date).getFullYear();    return year + ‘_‘ + month + ‘_‘ + day + ‘//‘;}/** * 判斷檔案夾是否存在 * @return {[type]} [description] */function isFolderHave(lastPath){    fs.exists(lastPath, function(exists){        if(exists){            return true;        }else{            return false;        }    })}/** * 建立最終目標檔案夾 * @param  {[type]} lastPath [description] * @return {[type]}          [description] */function createLastFloder(lastPath){    fs.mkdir( lastPath, function(){        console.log(‘[檔案夾建立]-‘ +lastPath + "成功!");    })}/** * 串連資料庫 * @return {[type]} [description] */function connectMysql(picname, picurl, time){    var connection = mysql.createConnection({      host     : ‘localhost‘,      user     : ‘root‘,      password : ‘root‘,      database : ‘nodejs‘    });    connection.connect(function(err){        if(err){            console.log(err);            return;        }        console.log(‘串連成功!‘);    });    saveToDataBase(connection, picname, picurl);        connection.end(function(err){        if(err){            return;        }        console.log(‘關閉串連成功!‘);    });}/** * 將資料存入資料庫,進行持久化 * @return {[type]} [description] */function saveToDataBase( connection, picname, picurl){    var  querySql = ‘INSERT INTO scaingDeskImg(Id,picname,picurl,time) VALUES(0,?,?,?)‘;        //注意存入資料庫中的資料如果有中文會出現,亂碼錯誤,導致執行失敗!    var  querySql_Params = [picname, targetPath+picurl+picname, new Date];        operationDataBase( connection,querySql, querySql_Params, operationType[‘0‘]);}/** * 對資料庫的操作 * @return {[type]} [description] */function operationDataBase( connection, querySql, querySql_Params,flag){    connection.query( querySql, querySql_Params, function (err, result) {        if(err){         console.log(‘[‘ + flag + ‘ERROR] - ‘,err.message);         return;        }               console.log(flag + ‘成功!‘);     });}timePoll();

結果:

涉及的知識:

 定時器:

schedule.scheduleJob(‘30 * * * * *‘, function(){    visitDesk();      console.log(‘每分鐘的30s都會執行!:‘ + (new Date).toLocaleTimeString());}); 

定時器中的第一個參數:

 秒  分   時    日   月    周 

*    *    *    *    *    *┬    ┬    ┬    ┬    ┬    ┬│    │    │    │    │    |│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)│    │    │    │    └───── month (1 - 12)│    │    │    └────────── day of month (1 - 31)│    │    └─────────────── hour (0 - 23)│    └──────────────────── minute (0 - 59)└───────────────────────── second (0 - 59, OPTIONAL)

例如:

30 * * * * * 就表示每分鐘的30秒執行

30 2 * * * * 就表示每小時的2分30秒執行

30 2 21 * * * 就表示每天的21點2分30秒執行

30 2 21 8 * * 就表示每月的8號21點2分30秒執行

...依次類推

 

讀寫檔案:

//從案頭將檔案讀入流

var fileReadStream = fs.createReadStream(desktopPath + file);

//從要存入的檔案建立寫入流

var fileWriteStream = fs.createWriteStream(lastPath + file);

//最後通過node的pipe()的方法串連兩個資料流,猶如管道一樣將資料讀入寫入

 

  fileReadStream.pipe(fileWriteStream);

具體的可以參見API。

 

Node+fs+定時器(node-schedule)+MySql

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.