I dag vil vi skabe den såkaldte. Yandex funktion (officielt navn
Jeg er også modstander (men uden fanatisme) af traditionelle servere, og tilhænger af de såkaldte. serverless (serverløse) løsninger, fordi jeg ikke kan lide (og jeg ved ikke rigtig, hvordan man) administrerer servere, og i endnu højere grad betale for den tid, hvor de ikke er indlæst. En anden ting er funktioner. Nogen servicerer dem uden mig, og jeg betaler kun for opkald. I begyndelsen af oktober 2019 præsenterede Yandex sin Yandex Cloud-funktioner - synes at være den første i Den Russiske Føderation serverless. Og det, der er særligt rart, er, at for Alices evner er de generelt frie, så de har været i mit perifere syn lige siden. Men lad os komme i gang allerede.
Lad os forestille os dette scenarie. Din ansøgning (f.eks. Alices færdigheder
Om hvordan fra Yandex funktioner foretage indtastninger i databasen Cloud Firestore vi har allerede set på det i selvstudiet
1. Opret en konto i SendGrid
BemærkSendGrid er bare mit valg, som jeg har truffet af flere grunde, den vigtigste er, at de har en færdiglavet SDK til Node.js. Du kan vælge enhver anden posttjeneste.
Lad os gå videre
I næste trin vælger vi node.js:
Dernæst kommer vi med til vores API-nøglenavn (vil kun blive vist i konsollen på listen over nøgler og har intet at gøre med vores fremtidige kode; jeg kom op med en uforgængelig demo-api-nøgle) og tryk på knappen Opret nøgle:
Nøglen vil blive genereret, vi kopierer den og opbevarer den i den dybeste fortrolighed. Og vi vil have en skærm med en knap Bekræft integration, som på billedet nedenfor, men vi vil ikke klikke på det endnu, men lad os gå videre til at skrive koden:
2. Skrive kode
Men selve koden er, som du kan se, latterligt lille - 22 linjer!
I kø #8 Min e-mail er hårdkodet (og derfor genert skjult) - angiv venligst din. I det virkelige liv vil vi modtage alle data (inklusive e-mail) fra objekt begivenhed. For eksempel hvis metoden POST et objekt sendes til vores funktion bruger med mark (ejendom) e-mail, kan værdien af dette felt fås på denne måde:
const { user } = event;
const email = user.email;
Og hvis e-mailadressen videregives til funktionen ved hjælp af metoden GET, for eksempel: https://functions.yandexcloud.net/123abc?[email protected]
parameterværdi e-mail du kan få det sådan her:
const email = event.queryStringParameters.email;
For at tage et kig på, hvad der præcist er indeholdt i et objekt begivenhed, kan du oprette den enkleste Yandex funktion og drej det med forespørgsler:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};
Dette er beskrevet mere detaljeret (men mindre tydeligt) i den officielle dokumentation
Så opret en projektmappe (f.eks. afsendere), gå til det, initialiser projektet, installer afhængigheder:
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
Her kræves kun pakken @sendgrid/mail. Plastikpose e-mail-validator tjekker e-mailadressen for gyldighed (hvordan gættede jeg ikke med det samme?), men hvis vi er sikre på det (det er allerede blevet tjekket i lang tid uden os), behøver vi ikke installere det (og evt. vi behøver selvfølgelig ikke tjekke det i koden). Plastikpose dotenv designet til at læse poster fra en fil .env som køretidsvariable. Men i Yandex funktioner Det er muligt at placere disse variable direkte i runtime-miljøet. Hvordan? - Jeg viser det nedenfor. Derfor pakken dotenv du kan heller ikke installere det, og filen .env - ikke opret, og samtidig er koden i filen index.js ikke skift. Men her har vi installeret denne pakke, så vi opretter filer index.js и .env:
touch index.js
touch .env
I fil index.js skriv 22 linjer kode vist i skærmbilledet ovenfor (kun i linjen #8 ændre din e-mail), og i filen .env - (uden anførselstegn eller tegnsætning) angiv parret - nøglenavn/værdi APIsom vi for nylig modtog i konsollen SendGrid:
SENDGRID_API_KEY=din-meget-hemmelige-sendgrid-api-nøgle
Og hvis du vil have mindre arbejde, så klon depotet og installer pakkerne:
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
I fil index.js, i kø #8 ændre e-mail; oprette en fil i rodmappen .env, og heri angives navnet/værdien af nøglen API, som vist lige ovenfor.
3. Implementer
Mere eller mindre klart og detaljeret vedr Yandex.Cloud og hvordan man placerer det der Yandex funktioner beskrevet i min artikel
skab zip-arkiv (lad os kalde det f.eks. mailer.zip), hvori vi inkluderer biblioteket node_modules og filer .env, index.js - alt fra vores projektkatalog:
Vi opretter en funktion med navnet... korrekt - afsendere, i venstre navigationsmenu kommer vi ind Redaktøren, udfyld de påkrævede felter, og skift til fanen ZIP-arkiv download vores arkiv mailer.zip:
Og her er den tidligere nævnte mulighed for at downloade API nøgle direkte her, i stedet for at oprette en fil i projektet .env, og installer ikke pakken dotenv. Men vi har allerede gjort alt dette, så jeg viser det kun til orientering. Det vil sige, der er ingen grund til at duplikere!
Klik nu på knappen i øverste højre hjørne Opret version, og vent et par sekunder. Når alt er klar, går vi automatisk til sektionen Anmeldelse. Der vil vi aktivere muligheden offentlig funktionså du kan interagere med det fra omverdenen.
Du ser det blå link ud for inskriptionen Link til opkald? Klik på den. Et tomt browservindue åbnes... Men vent - jeg har modtaget en e-mail:
Nu kan du vende tilbage til konsollen SendGrid, og tryk på knappen Bekræft integration. Systemet vil tjekke alt gennem dets kanaler, og som et resultat skulle det returnere en skærm som denne:
Det er det, fyre (og piger, selvfølgelig) - alt er virkelig meget enkelt og elegant! Der kommer flere artikler. Hvis nogen er interesseret i at læse sådan noget, så tilmeld dig, så du ikke går glip af noget.
4. Donationer
Kilde: www.habr.com