QR碼很有趣,對吧?我們愛它們,然後恨它們,然後又愛它們。無論如何,它們最近又開始流行起來,這讓我開始思考它們是如何製作的。市面上有數不清的QR碼生成器,但假設你需要在自己的網站上生成QR碼。雖然有些軟件包可以做到這一點,但它們通常體積龐大(例如,180KB),包含生成QR碼所需的所有內容。將這些內容與網站的其他腳本一起提供服務並不理想。
雲函數的概念為解決這個問題提供了一種優雅的方案。雲函數駐留在服務器上,僅在需要時調用,類似於一個小型API。
一些主機提供雲函數功能,DigitalOcean就是其中之一!與Droplets一樣,函數部署也相當容易。
DigitalOcean提供了一個CLI命令,可以為我們搭建項目框架。進入你想要設置項目的目錄,然後運行:
<code>doctl serverless init --language js qr-generator</code>
請注意,語言是明確聲明的。 DigitalOcean函數還支持PHP和Python。
我們會得到一個名為qr-generator的簡潔項目,其中包含一個/packages文件夾,該文件夾包含項目的所有函數。其中包含一個示例函數,但我們現在可以忽略它,並在其旁邊創建一個qr文件夾:
該文件夾將存放qrcode包和我們的qr.js函數。因此,讓我們進入packages/sample/qr目錄並安裝軟件包:
<code>npm install --save qrcode</code>
現在,我們可以在一個新的qr.js文件中編寫函數:
const qrcode = require('qrcode') exports.main = (args) => { return qrcode.toDataURL(args.text).then(res => ({ headers: { 'content-type': 'text/html; charset=UTF-8' }, body: args.img == undefined ? res : ` <img src="/static/imghw/default1.png" data-src="https://img.php.cn/" class="lazy" alt="Let's Make a QR Code Generator With a Serverless Function!"> ` })) } if (process.env.TEST) exports.main({text:"hello"}).then(console.log)
這段代碼的作用是引入qrcode包,並導出一個函數,該函數基本上使用base64 PNG生成一個<img alt="讓我們製作具有無服務器功能的QR碼生成器!" >
標籤作為源。我們甚至可以在終端中測試它:
<code>doctl serverless functions invoke sample/qr -p "text:css-tricks.com"</code>
這裡還有一個額外的步驟。項目搭建完成後,我們會得到一個project.yml文件,它使用一些信息配置函數。默認情況下,文件內容如下:
targetNamespace: '' parameters: {} packages: - name: sample environment: {} parameters: {} annotations: {} actions: - name: hello binary: false main: '' runtime: 'nodejs:default' web: true parameters: {} environment: {} annotations: {} limits: {}
看到那些高亮顯示的行了嗎? packages: name
屬性指定函數在packages文件夾中的位置,在本例中是名為sample的文件夾。 actions/ name
屬性是函數本身的名稱,也就是文件名。當我們啟動項目時,默認名稱為hello,但我們將其命名為qr.js,因此在繼續之前,我們應該將該行從hello更改為qr。
我們可以直接從命令行進行部署!首先,我們連接到DigitalOcean沙箱環境,以便獲得用於測試的實時URL:
## 你需要一個DO API密鑰doctl sandbox connect
現在,我們可以部署函數了:
doctl sandbox deploy qr-generator
部署完成後,我們可以通過URL訪問該函數。 URL是什麼?有一個命令可以獲取它:
doctl sbx fn get sample/qr --url https://faas-nyc1-2ef2e6cc.doserverless.co/api/v1/web/fn-10a937cb-1f12-427b-aadd-f43d0b08d64a/sample/qr
太棒了!我們不再需要將整個軟件包與其他腳本一起發布!我們可以訪問該URL並從那裡生成QR碼。
我們獲取API,這就是全部內容!
以上是讓我們製作具有無服務器功能的QR碼生成器!的詳細內容。更多資訊請關注PHP中文網其他相關文章!