發表文章

目前顯示的是有「nodejs」標籤的文章

本站已搬家!

本站已搬家至https://blog.typeart.cc


歡迎舊雨新知指教!

物件存在陣列裡的搜尋方法

JavaScript在一般的陣列中,可以直接使用filter、map來遍歷元素並搜尋或取得資料 但在object,就無法使用這些方便的函式了! 尤其當資料內容又是以物件型式儲存在陣列裡面 兩個東西結合在一起的時候真的是會寫到一團亂不知道自己在寫什麼東西XD 花了不少時間總算寫了個應該….還算是精簡的寫法QQ > DEMO < See the Pen object in array search demo by hsuanyi ( @windclara ) on CodePen . 要做到在表格內每一欄位的資料都可以搜尋並即時顯示出有相同內容之欄位資料 由於我來源資料是儲存在nedb裡面(註:nedb為一輕量化的單機版mongoDB,可視為nosql版的sqlite) nedb中每一筆資料是一個物件,查詢出來後的所有結果回傳成一組陣列 就會得到如下的資料結構: dbData = [ {id: 0001 ,name: '王小明' ,phone: 0912345678 }, {id: 0002 ,name: '劉得滑' ,phone: 0987654321 }, {id: 0003 ,name: '周潤花' ,phone: 0978123456 }, {id: 0004 ,name: '林志零' ,phone: 0955111222 }]; 搜尋功能的程式碼: function search (searchValue) { let searched = dbData.map (obj => { if ( Object .keys(obj).some ( property => obj[property].toString() . indexOf(searchValue) != - 1 ) ) return obj; }); return searched.filter (obj => obj != undefined ); } //demo網頁我使用vue,所以demo網頁裡的寫法會略有不同 //為方便您使用,本文中以fun...

nodejs使用readline單行讀取並搭配iconv-lte解析big5等本地文件

在nodejs中,fs預設開啟格式為utf8,本身可以支援的格式如下: ascii base64 binary hex ucs2/ucs-2 utf16le/utf-16le utf8/utf-8 latin1 (ISO8859-1, only in node 6.4.0+ ) 大部份情況下是不太需要調整 但在讀中文檔案上,往往會遇到big-5、gbk等檔案而無法正確解析 網路上使用fs.readFile等搭配iconv-lte應該有滿多相關資料,在此就不贅述(可至文末參考資料的stackOverflow參考) 但對於nodejs原生提供的readline module,卻似乎很少有相關資料 恰巧最近開發遇到類似問題,順便記錄一下解決方法 為方便其他程式使用es7語法(async,await),所以return promise 主要功能為讀到檔案後,逐行存入陣列並回傳 完整程式碼如下 //檔案儲存成fileRead.js const fs = require ( 'fs' ); const readline = require ( 'readline' ); const iconv = require ( 'iconv-lite' ); export async function readFileByLine (filePath) { return new Promise( function (resolve) { let lines = []; let rl = readline.createInterface({ input: fs.createReadStream(filePath).pipe(iconv.decodeStream( 'big5' )) , output: process.stdout, terminal: false }); rl.on( 'line' , function (line) { lines.push(line);...

electron-vue 讀取本地文件(windows下以nedb為例)

使用electron-vue開發時,在開發過程可以直接無腦地直接指定路徑至要操作的檔案 但最終要產出成品時,就不能用這樣的寫法,因為程式打包後,路徑指向就會完全不同。 以下以nedb為例,說明electron-vue路徑指定方式以及如何讓nedb設定至全域,讓每個component可以直接使用。 nedb注入vue全域使用 首先建立nedb宣告的js檔,命名為database,放在assets目錄 (僅供範例,檔名、路徑隨各人喜好) src/renderer/assets/database.js 1. 宣告nedb 為了可以直接使用async、await,直接採用別人打包好的promise版本 import Datastore from 'nedb-promise' ; import path from 'path' ; import { remote } from 'electron' ; export default new Datastore({ filename: path.join(__dirname, "../../../TESTDB.db" ), autoload: true }); 2. 注入vue全域 打開 src/renderer/main.js 在new Vue上方引入 import db from './assets/database' Vue.db = Vue.prototype.$db = db 3. 其他vue檔直接操作方式 其他vue檔直接使用this.$db就可以操作db了! async mounted(){ const vm = this ; let DBdata = await vm.$db.find({}); } electron-vue 讀取本地文件 開發到尾聲,準備要發佈程式,就要調整路徑位置。 這裡可以使用electron的 getAppPath() 函式。 getAppPath() 函式可以直接取得你的執行檔路徑。要注意的是,他產出來的完全路徑包含自己這個exe檔 也就會是 D:\electron-vue\test.exe 。 若直接將你的TESTDB.db串在路徑後面...

安裝NodeJs及版本切換控制(mac)

前置軟體準備 homebrew — 套件件管理工具 nvm — node版本控制 nodejs — nodejs本體 安裝順序:homebrew -> nvm -> nodejs 若只是練習玩玩,不裝homebrew、nvm,直接安裝nodejs也行 但之後遇上需要版本切換的問題,就會相當麻煩… 1. 安裝Homebrew Homebrew 是mac上相當好用的套件管理工具,推薦安裝使用! 安裝方法 打開終端機(terminal),輸入下列指令 /usr/bin/ruby -e " $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) " 此時會自動下載並安裝xcode 2. 安裝nvm 終端機(terminal)下繼續輸入 git clone git://github .com /creationix/nvm .git ~/ .nvm //下載及安裝nvm open . ~/ .bash _profile //會用記事本開啟 在記事本裡輸入內容 if [ -f ~/.bashrc ]; then source ~/.bashrc fi 存檔後關閉 接著回終端機(terminal)下繼續輸入 open ~/.bashrc 一樣會再開啟記事本 輸入 . ~/.nvm/nvm.sh 存檔後關閉 再回終端機(terminal)輸入 source ~/bashrc 補充說明: .bashrc vs .bash_profile 個人理解是類似windows下的環境變數。(如有錯誤請告知) 當你籍由輸入帳號密碼(不論 console或是ssh)登入時 ,系統透過 .bash_profile 執行相關的設定動作。 而 .bashrc 則是在已經登入的情況下,開啟終端機(terminal)視窗,在命令提示符號出現前,就會先執行 .bashrc 內的指令 一次維護2個檔案相當麻煩,所以在.bash_profile輸入下列指令呼叫 if [ -f ~/.bashrc ...