云開(kāi)發(fā) 云函數(shù)實(shí)用工具庫(kù)

2020-07-21 17:55 更新

云函數(shù)經(jīng)常需要處理一些非?;A(chǔ)事情,比如時(shí)間、數(shù)組、數(shù)字、對(duì)象、字符串、IP等,自己造輪子的成本很高,這時(shí)候我們可以到前面提到的awesome nodejs的Github里去找一些別人已經(jīng)寫(xiě)好的開(kāi)源模塊,我們直接下載引入即可,下面就列舉一些比較好用的工具并會(huì)結(jié)合云函數(shù)給出一些詳細(xì)的案例。

一、moment時(shí)間處理和Timezone世界時(shí)間

1、云函數(shù)時(shí)間處理

開(kāi)發(fā)小程序時(shí)經(jīng)常需要格式化時(shí)間、處理相對(duì)時(shí)間、日歷時(shí)間以及時(shí)間的多語(yǔ)言問(wèn)題,這個(gè)時(shí)候就可以使用比較流行的momentjs了,可以參考moment中文文檔

使用開(kāi)發(fā)者工具新建一個(gè)云函數(shù),比如moment,然后在package.json增加moment最新版latest的依賴(lài):

"dependencies": {
  "wx-server-sdk": "latest",
  "moment": "latest"
}

在index.js里的代碼修改為如下,我們將moment區(qū)域設(shè)置為中國(guó),將時(shí)間格式化為 十二月 23日 2019, 4:13:29 下午的樣式以及相對(duì)當(dāng)前時(shí)間多少分鐘前

const cloud = require('wx-server-sdk')
const moment = require("moment");
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV,
  })
exports.main = async (event, context) => {
    moment.locale('zh-cn');
    time1 = moment().format('MMMM Do YYYY, h:mm:ss a');
    time2 = moment().startOf('hour').fromNow();
    return  { time1,time2}
}

值得注意的是,云函數(shù)中的時(shí)區(qū)為 UTC+0,不是 UTC+8,格式化得到的時(shí)間和在國(guó)內(nèi)的時(shí)間是有8個(gè)小時(shí)的時(shí)間差的,如果在云函數(shù)端將時(shí)間格式轉(zhuǎn)換為字符串需要給小時(shí)數(shù)+8(這個(gè)處理需要注意一些細(xì)節(jié),不會(huì)處理的建議修改時(shí)區(qū)),也可以修改時(shí)區(qū)。

2、函數(shù)處理時(shí)區(qū)的兩個(gè)方法

云函數(shù)修改時(shí)區(qū)我們可以使用timezone依賴(lài)(和moment是同一個(gè)開(kāi)源作者),timezone技術(shù)文檔

在package.json增加moment-timezone最新版latest的依賴(lài),然后修改上面相應(yīng)的代碼即可,

"dependencies": {
  "wx-server-sdk": "latest",
  "moment-timezone": "latest"
}

然后使用在云函數(shù)里使用如下代碼,即可完成時(shí)區(qū)的轉(zhuǎn)換。

const moment = require('moment-timezone');
time1 = moment().tz('Asia/Shanghai').format('MMMM Do YYYY, h:mm:ss a');

云函數(shù)的時(shí)區(qū)除了可以使用moment來(lái)處理外,還可以通過(guò)配置云函數(shù)的環(huán)境變量的方法(在云開(kāi)發(fā)控制臺(tái)),添加一個(gè)字段 TZ,值為Asia/Shanghai來(lái)指定時(shí)區(qū)即可。

二、獲取公網(wǎng)IP

有時(shí)我們希望能夠獲取到服務(wù)器的公網(wǎng)IP,比如用于IP地址的白名單,或者想根據(jù)IP查詢(xún)到服務(wù)器所在的地址,ipify就是一個(gè)免費(fèi)好用的依賴(lài),通過(guò)它我們也可以獲取到云函數(shù)所在服務(wù)器的公網(wǎng)IP,ipify Github地址。

使用開(kāi)發(fā)者工具新建一個(gè)getip的云函數(shù),然后輸入以下代碼,并在package.json的”dependencies”里增加最新版的ipify依賴(lài):

"dependencies": {
  "wx-server-sdk": "latest",
  "ipify": "latest"
}

在index.js里的代碼修改為如下,調(diào)用ipify返回ipv4的服務(wù)器地址:

const cloud = require('wx-server-sdk')
const ipify = require('ipify');
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
    return await ipify({ useIPv6: false })
}

然后右鍵getip云函數(shù)根目錄,選擇在終端中打開(kāi),輸入npm install安裝依賴(lài),之后上傳并部署所有文件。我們可以在小程序端調(diào)用這個(gè)云函數(shù),就可以得到云函數(shù)服務(wù)器的公網(wǎng)IP,這個(gè)IP是隨機(jī)而有限的幾個(gè),反復(fù)調(diào)用getip,就能夠窮舉所有云函數(shù)所在服務(wù)器的ip了??赡苣銜?huì)在使用云函數(shù)連接數(shù)據(jù)庫(kù)或者用云函數(shù)來(lái)建微信公眾號(hào)的后臺(tái)時(shí)需要用到IP白名單,我們可以把這些ip都添加到白名單里面,這樣云函數(shù)就可以做很多事情啦。

三、加解密Crypto

crypto模塊是nodejs的核心模塊之一,它提供了安全相關(guān)的功能,包含對(duì) OpenSSL 的哈希、HMAC、加密、解密、簽名、以及驗(yàn)證功能的一整套封裝。由于crypto模塊是內(nèi)置模塊,我們引入它是無(wú)需下載,就可以直接引入。

使用開(kāi)發(fā)者工具新建一個(gè)云函數(shù),比如crypto,在index.js里輸入以下代碼,我們來(lái)了解一下crypto支持哪些加密算法,并以MD5加密為例:

const cloud = require('wx-server-sdk')
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV,
})
const crypto = require('crypto');
exports.main = async (event, context) => {
    const hashes = crypto.getHashes(); 
    //獲取crypto支持的加密算法種類(lèi)列表


    //md5 加密 CloudBase2020 返回十六進(jìn)制
    var md5 = crypto.createHash('md5');
    var message = 'CloudBase2020';
    var digest = md5.update(message, 'utf8').digest('hex');
    return {
        "crypto支持的加密算法種類(lèi)":hashes,
        "md5加密返回的十六進(jìn)制":digest
    };
}

將云函數(shù)部署之后調(diào)用從返回的結(jié)果我們可以了解到,云函數(shù)crypto模塊支持46種加密算法。

四、Lodash實(shí)用工具庫(kù)

Lodash是一個(gè)一致性、模塊化、高性能的 JavaScript 實(shí)用工具庫(kù),通過(guò)降低 array、number、objects、string 等數(shù)據(jù)類(lèi)型的使用難度從而讓 JavaScript 變得更簡(jiǎn)單。Lodash 的模塊化方法非常適用于:遍歷 array、object 和 string;對(duì)值進(jìn)行操作和檢測(cè);創(chuàng)建符合功能的函數(shù)。

技術(shù)文檔: Lodash官方文檔、Lodash中文文檔

使用開(kāi)發(fā)者工具新建一個(gè)云函數(shù),比如lodash,然后在package.json 增加 lodash最新版latest的依賴(lài):

  "dependencies": {
        "lodash": "latest"
    }

在index.js里的代碼修改為如下,這里使用到了lodash的chunk方法來(lái)分割數(shù)組:

const cloud = require('wx-server-sdk')
var _ = require('lodash');
cloud.init({
    env: cloud.DYNAMIC_CURRENT_ENV,
  })
exports.main = async (event, context) => {
    //將數(shù)組拆分為長(zhǎng)度為2的數(shù)組
    const arr= _.chunk(['a', 'b', 'c', 'd'], 2);
    return arr;
}

右鍵lodash云函數(shù)目錄,選擇“在終端中打開(kāi)”,npm install 安裝模塊之后右鍵部署并上傳所有文件。我們就可以通過(guò)多種方式來(lái)調(diào)用它(前面已詳細(xì)介紹)即可獲得結(jié)果。Lodash作為工具,非常好用且實(shí)用,它的源碼也非常值得學(xué)習(xí),更多相關(guān)內(nèi)容則需要大家去Github和官方技術(shù)文檔里深入了解。

awesome Nodejs頁(yè)面我們了解到還有Ramba、immutable、Mout等類(lèi)似工具庫(kù),這些都非常推薦。借助于Github的awesome清單,我們就能一手掌握最酷炫好用的開(kāi)源項(xiàng)目,避免了自己去收集收藏。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)