# Node.js Lambda 開發進度說明 ### 須達到的功能及目前完成進度 : - [x] 1. 取得user上傳檔案名稱、檔案內容 - [x] 2. 解析Excel檔,得到座標、欄位內容 - [x] 3. 將檔案複製至 **home/history/廠商名稱/上傳當日日期/** - [x] 4. 刪除user最初上傳的檔案 - [ ] 5. 取得上傳檔案的user name **(已取得)** 、datetime **(已取得)**、object url - [ ] 6. 進行Web api測試 ### 本地環境部署 : #### 軟體需求 : * 編譯器選擇 : **Visual Studio Code** * 須使用 **aws command line** 進行aws設定、上傳lambda的動作 [aws cli 下載](https://aws.amazon.com/tw/powershell/) #### AWS帳號設定指令 : ``` $joey aws configure --> AWS設定輸入 如AccessID、Key、Region、Description $joey aws configure list --> 查看AWS設定 $joey aws lambda update-function-code --function-name my-lambda-function --zip-file fileb://function.zip --> 將local上的程式上傳至AWS Lambda中進行測試 ``` #### 上傳lambda指令 : ``` $joey aws lambda update-function-code --function-name my-lambda-function --zip-file fileb://function.zip --> 將local上的程式上傳至AWS Lambda中進行測試 ``` #### npm初步設置 : 因為專案資料夾裡沒有 package.json 檔案。 而package.json 是掌管專案資訊的重要檔案 。所以要在專案目錄下輸入: ``` npm init ``` 執行後cli會出現要你輸入的相關資訊,請依序確認 (如果沒有特別需求,可以按enter略過) ### lambda所使用的npm套件介紹 + 安裝步驟 : * ### aws-sdk.js > AWS-SDK 可以幫助我們在程式中去使用 AWS 服務 ``` npm install aws-sdk --save var AWS = require('aws-sdk'); ``` * ### js-xlsx.js > js-xlsx是Github中獲得最多星星的解析excel資源,可以支援多種格式 **XLSX / XLSM / XLSB / XLS / CSV**,另外必須以Node.js進行開發 ``` npm install xlsx --save var XLSX = require('xlsx'); 重要參數介紹 : workbook = 整份Excel檔案 worksheet = Excel中的Sheet表 cell = 單一儲存格 ``` * ### moment.js > moment.js 是可以進行解析、轉換、設置、格式化日期的 JavaScript 函式庫,透過 moment.js 就可以簡化js時間處理的過程,快速的達到與時間相關的效果呈現。 ``` npm install moment --save var moment = require('moment'); var d = new Date(); moment(d).utcOffset('0800').format('YYYY-MM-DD'); ``` --- ### 目前開發所碰到的問題 : #### 1. lambda無法成功取得user所上傳object的url > 顯示ERROR : The request signature we calculated does not match the signature you provided. Check your key and signing method. 已查詢資料 : [stackoverflow 相似問題 1 ](https://stackoverflow.com/questions/30518899/how-to-fix-the-request-signature-we-calculated-does-not-match-the-signature-er)、[AWS 簽章版本 4 錯誤進行故障診斷](https://docs.aws.amazon.com/zh_tw/general/latest/gr/signature-v4-troubleshooting.html) **產生ERROR的可能原因 :** 1. AWS登入字串錯誤 2. 路徑錯誤 ### 整體開發下來的一些優缺點 : #### 優 :+1: 1. Node.js 使用由 Google 開發的 V8 引擎,可以將 JavaScript 編譯成原生機器碼並**快速執行**。 2. 具有強大的套件管理工具(NPM)功能,任何人都可以發佈自己的套件,所有的套件也都可以在NPM資料庫中找到。 [NPM Package search](https://www.npmjs.com/) #### 缺 :-1: 1. node_modules太肥,在壓縮上傳至aws lambda時需花費一段時間才可上傳完成。 2. 因node.js弱型別的語言特性,當宣告參數增加時,程式碼容易變得混亂不好理解。 參考資料 > [部署程序](https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/nodejs-create-deployment-pkg.html) >[getObject](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property) >[Create folder](https://stackoverflow.com/questions/19459893/how-to-create-folder-or-key-on-s3-using-aws-sdk-for-node-js/31728298) > [解析Excel檔案](https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/286299/)