لنقم بإنشاء مولد رمز الاستجابة السريعة بوظيفة بدون خادم! ذكاء بيانات PlatoBlockchain. البحث العمودي. عاي.

لنقم بإنشاء مولد رمز الاستجابة السريعة بوظيفة لا تحتاج إلى خادم!

رموز QR مضحكة ، أليس كذلك؟ نحن نحبهم ، ثم نكرههم ، ثم نحبهم مرة أخرى. على أي حال ، لقد ظهرت مرة أخرى مؤخرًا وجعلني أفكر في كيفية صنعها. هناك مثل مولدات رمز الاستجابة السريعة gazillion هناك ، لكن قل إنه شيء عليك القيام به على موقع الويب الخاص بك. هذه الحزمة تستطيع أن تفعل ذلك. لكنه يزن أيضًا 180 كيلو بايت لكل ما يحتاجه لإنشاء الأشياء. لن ترغب في تقديم كل ذلك مع بقية البرامج النصية الخاصة بك.

الآن ، أنا جديد نسبيًا على مفهوم وظائف السحابة ، لكنني سمعت أن هذه هي ركبتي النحل لشيء مثل هذا تمامًا. بهذه الطريقة ، تعيش الوظيفة في مكان ما على خادم يمكن استدعاؤه عند الحاجة. Sorta مثل API قليلا لتشغيل الوظيفة.

يقدم بعض المضيفين نوعًا من ميزة وظيفة السحابة. تصادف أن DigitalOcean واحدة منهم! ومثل Droplets ، من السهل جدًا نشر الوظائف.

قم بإنشاء مجلد وظائف محليًا

DigitalOcean لديها CLI مع أمر من شأنه أن يدعم الأشياء لنا ، لذلك cd أينما تريد إعداد الأشياء وتشغيلها:

doctl serverless init --language js qr-generator

لاحظ أن اللغة معلنة صراحة. تدعم وظائف DigitalOcean أيضًا PHP و Python.

نحصل على مشروع نظيف لطيف يسمى qr-generator مع /packages المجلد الذي يحتوي على جميع وظائف المشروع. هناك دالة نموذجية هناك ، لكن يمكننا التغاضي عنها في الوقت الحالي وإنشاء ملف qr المجلد المجاور له:

لنقم بإنشاء مولد رمز الاستجابة السريعة بوظيفة بدون خادم! ذكاء بيانات PlatoBlockchain. البحث العمودي. عاي.
لنقم بإنشاء مولد رمز الاستجابة السريعة بوظيفة لا تحتاج إلى خادم!

هذا المجلد هو المكان الذي يوجد فيه كل من ملف qrcode حزمة ولدينا qr.js ستعيش وظيفة. لذا دعنا cd إلى packages/sample/qr وقم بتثبيت الحزمة:

npm install --save qrcode

الآن يمكننا كتابة الدالة في ملف جديد 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="${res}">` }))
} if (process.env.TEST) exports.main({text:"hello"}).then(console.log)

كل ما تفعله يتطلب qrcode الحزمة وتصدير وظيفة تقوم بشكل أساسي بإنشاء ملف <img> علامة ذات تنسيق PNG base64 للمصدر. يمكننا حتى اختباره في المحطة:

doctl serverless functions invoke sample/qr -p "text:css-tricks.com"

تحقق من ملف التكوين

هناك خطوة إضافية نحتاجها هنا. عندما تم تدعيم المشروع ، حصلنا على هذا القليل 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 property هو اسم الوظيفة نفسها ، وهو اسم الملف. إنه hello بشكل افتراضي عندما نقوم بتدوير المشروع ، لكننا أطلقنا عليه اسمنا qr.js، لذلك يجب علينا تغيير هذا الخط من hello إلى qr قبل الانتقال.

انشر الوظيفة

يمكننا القيام بذلك مباشرة من سطر الأوامر! أولاً ، نتصل ببيئة وضع الحماية لـ DigitalOcean بحيث يكون لدينا عنوان URL مباشر للاختبار:

## You will need an DO API key handy
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 هذا وإنشاء رمز الاستجابة السريعة من هناك.

تجربة

We fetch API وهذا كل ما في الأمر حقًا!

تضمين CodePen الاحتياطية

لنقم بإنشاء مولد رمز الاستجابة السريعة بوظيفة لا تحتاج إلى خادم! نشرت أصلا في حيل CSS. يجب احصل على النشرة الإخبارية.

الطابع الزمني:

اكثر من الخدع المغلق