發表文章

目前顯示的是 1月, 2021的文章

使用Digital Ocean超快速搭建出部屬NodeJs的主機

圖片
  在 上一篇 我簡單分享了透過數位海洋的雲端資料庫主機搭建方式 可以看到十分迅速一個DB Server就自然產生了 這次要來部屬NodeJs的應用 就需要先產生可以部屬NodeJS的主機環境 側欄Marketplace點入後 搜尋NodeJs後 預設此主機已經把部屬環境該裝的都裝好了 跟泡麵一樣都包裝好了 應有盡有只要按鈕點一下就自然產生 包含NGINX、NPM  、 NodeJs 跟 PM2 ( PM2.5) 基本上會發現創建方式 跟上一篇差不多一致性的操作流程 創建好的node droplet我們只要複製該IP 就會看到預設導入的網頁 接著你網站目錄可以透過git或FileZela 之類的FTP軟體來連線放置 預設放置於/var/www的目錄下 這裡預設環境都有安裝好npm跟nodejs了 官方html輸出位置預設就是在/var/www中的hello.js 那通常也要記得你的NodeJs專案中有用到捨麼package要記得補下載 pm2 list (pm2主要是一套常用於管理主機上nodejs 應用process的工具,PM:Process Manager) 由於我們是直接透過digitalocean幫我們一鍵到位 不然若是一個全新的linux主機通常還要自己手動下載安裝 npm install --global pm2 1.提供node應用若crash掉後自動重啟的監控服務。 2.提供可以在server重啟後(或在指定的條件下),應用自動重啟服務。 3.提供多項資訊的表格視覺化查看,包含已重啟次數、CPU 跟 memory用量、process id...等等。 pm2 list   可以條列出目前的網站服務process 列表,看到目前該支應用process的運行狀態跟負載資訊。 由於預設跑hello這支js來呈現可愛鯊魚畫面 我們想把它偷天換日 所以我們暫時把它中斷 pm2 stop 0 並刪除該Process  pm2 delete 0 (在過程中可不斷透過pm2 list  來看下了指令後狀態的變化) 這裡都是賦予參數值為 process id 也就是0 由於我這支預設port設定跑 8080 因此需要再去更改 預設自帶範例port設定為3000 由於我在本機windows不能用那個port會衝到 因此若想要改該主機的預設port 就需要去到 /etc

Node.JS學習筆記(五)_使用twilio簡訊API做簡訊驗證碼的發送

圖片
  當你註冊好twilio的帳戶以後 預設的適用帳戶(免費)只支援自己發給自己 如要一支門號發送到其他支手機就必須要付費升級 看你要給測試期間多少扣打 比如20美-->可以發500則簡訊  發送簡訊時有兩樣最重要的就是 accountSid 和  authToken 這兩樣權限即高的隱密資料是要自己保護好的 要小心不要因為版控捨麼的把這些資訊都一起傳上去... 側欄可以進到程式API串接儀表單 裡面會有發送紀錄、剩餘扣打、API串接的範例...等等 預設適用帳戶提供的門號可能會有無法發送的問題因此也要記得額外去購買其他支援發送到某國的門號 這裡就是可以給你測試門號是否支援 台灣、日本、香港、美國....之類的國家間門號簡訊發送是否支援的 測試頁內建有提供不同程式語言串接範例 所以 以NodeJs來說發送簡訊程式範例就是 1 2 3 4 5 6 7 8 9 10 11 12 const accountSid = '{你的acountSID}' ; const authToken = '{你的token}' ; const client = require ( 'twilio' )( accountSid , authToken ); client . messages . create ({ body : '{簡訊訊息}' , from : '{目前帳戶購買綁定的門號}' , to : '{目標號}' }) . then ( message => console . log ( message . sid )) . done ();

NodeJs跟MySQL連線過久時的錯誤引發_Error: Cannot enqueue Query after fatal error.

圖片
  由於我在應用中只有開一個connection用到底的關係 當connection   timeout時就會報錯 設想如果今天有個表單要塞到DB 使用者填寫一半去洗手間或是開會回來 才完成表單填寫傳送時會發生的窘境 因此需要加上錯誤捕捉和重新連線的機制 Before 就是只產生唯一的連線 After 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 //啟動mysql連線 //connect.connect(); connect . connect ( function ( err ){ if ( err ) { console . log ( "\n\t *** Cannot establish a connection with the database. ***" ); connect = reconnect ( connect ); } else { console . log ( "\n\t *** New connection established with the database. ***" ) } }); function reconnect ( connection ){ console . log ( "\n New connection tentative..." ); //- Destroy the current connection variable if ( connection ) connection . destroy (); //- Create a new one var connection = mysql . createConnection ( db_confi

Node.JS學習筆記(四)_資料庫敏感資料的加密

圖片
 一般系統可能在做帳戶的個資處理 會有需要對存入DB後的內容做加密的處理 避免直接明碼呈現給系統管理員 一來避免有個資外洩爭議 二來避免遇到資料庫被入侵後敏感資料直接暴露的問題 以下是一個明碼直接存入密碼的 跟一個經過md5加密後的密碼存入結果 有的可能是有自己有寫客製化的加密換位的處理 這裡使用的是crypto的module https://developer.aliyun.com/mirror/npm/package/crypto https://www.npmjs.com/package/crypto 根據NPM官網上講述是指已經過時 但已經融入既定新版的NodeJs Module裡面了 This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. 因此不用額外在npm install一些武ㄟ某A 直接把該既有的module給require來使用都丟阿拉 這裡查看一下官方範例函數怎麼call  基本上就三步驟 1.建立加密的Hash物件 ->指定加密演算法規則 2.用update來對原本的明碼資料做傳入更新 3.透過digest來轉乘16進制形式 Ref: Node.js v15.5.1 Documentation https://nodejs.org/api/crypto.html#crypto_crypto How to use the crypto module https://nodejs.org/en/knowledge/cryptography/how-to-use-crypto-module/ 其他的加密使用方式範例(參考此github) https://github.com/michaelliao/learn-javascript/tree/master/samples/node/crypto 廖雪峰網站-crypto https://www.liaoxuefeng.com/wiki/1022910821149312/1023025778520640 你以為你的密碼很安全嗎?md5加密的破

使用Digital Ocean建立包含有MySQL資料庫的託管主機空間

圖片
  一開始註冊完數位海洋 會提供100美元的扣打給開發者測試使用 產生一個Droplets託管空間 作業系統選擇Ubuntu 20.10 最新版 選擇Basic方案  每小時0.007美元方案 分頁切至Marketplace選擇MySQL Ubuntu 這裡由於台灣離新加坡機房是比較近的因此就選新加坡 這裡選擇Password  這裡設的password要記得 待會連終端會有用到 底下有可以自行挑選是否要自動bakup加價服務項目 這裡暫時不勾 按下Create等它跑完 以創建好一台Linux而且已經安裝好MySQL的線上主機了(灑花~~ 在詳細設定細節可以看到目前資料庫配置資訊 使用者名稱改成root 每次有更動會有提示 旁邊側欄可以選擇Access console進到網頁版本terminal 這裡由於直接Browser開起來的consoel 不能複製粘貼 很不方便我們copy paste 長長的db password 因此我們要用putty透過SSH方式 先用root那組我們自己設定的帳密 連進去後此時的terminal就可以比較簡單做粘貼複製的動作好讓我們連進phpMyAdmin的 預設DB後台介面 Ref: https://marketplace.digitalocean.com/apps/mysql#getting-started

Node.JS學習筆記(三)_nvm套件指令操作_node版本控管套件

  NodeJs 一直不斷推陳出新新版本 若是在Windows的開發者要做node版本升級更新 就可以使用 nvm這個package 另一套'n' package (在Windows作業系統不支援因此就不推了)  https://www.npmjs.com/package/n

Node.JS學習筆記(二)_npm套件指令簡單介紹_Express框架的使用_pug(哈巴狗)的前身jade(玉石)

圖片
  https://nypost.com/2020/04/30/vet-warns-pugs-could-be-more-susceptible-to-getting-coronavirus/ NodeJs 時常搭配的開發框架 Express 官方網站: https://expressjs.com/ 在目錄下執行命令 npm install -g express 任一透過 npm安裝的套件 若是直接 npm install <package name> 只會在目前專案目錄下安置 但若是用npm install -g <package name> 則代表全域安裝的意思換言之,就是直接安裝在自己的電腦上, 而不單單專案資料夾。 以Windows 作業系統為例 預設會在如下路徑 C:\Users\<your-windows-username>\AppData\Roaming\npm NPM 是 Node Package Manager 的簡稱,它是一個線上套件庫 可把其想成.net 的nuget 若要卸載Global Install的Package 則下npm uninstall -g <package-name> 即可 此時會發現 C:\Users\<your-windows-username>\AppData\Roaming\ 下npm已經不見 那官方介紹的安裝方式 npm install express --save 這個安裝指令又有捨麼差異 npm install <package> --save 是指By單一專案的安裝 --save 的option意思是安裝在專案目錄下只要有先做 npm init , 加入--save 之後就會自動把Package相關資訊安置進 package.json 中。 先來看看如果只執行 npm install <package> npm install 執行完後,可以在 node_modules 中看到所有依賴的package。 比如像是 body-parser https://www.npmjs.com/package/body-parser 或是cookie https://www.npmjs.com/package/cookie 這些都是可以單獨