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中文网其他相关文章!