# 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/)