paint-brush
Wie ich einen Event-Scheduler in NodeJs erstellt habevon@arindam1729
306 Lesungen
306 Lesungen

Wie ich einen Event-Scheduler in NodeJs erstellt habe

von Arindam Majumder 12m2024/08/18
Read on Terminal Reader

Zu lang; Lesen

In diesem Artikel zeige ich Ihnen, wie Sie eine Node.js-Anwendung erstellen, die Ereignisse erstellen und automatisch E-Mail-Einladungen mit Google Meet-Links versenden kann. Wir verwenden das Express-Framework, um den Ereignisplaner zu erstellen. Zu Beginn müssen wir eine Node.js-Umgebung einrichten und einen Express-Server einrichten.
featured image - Wie ich einen Event-Scheduler in NodeJs erstellt habe
Arindam Majumder  HackerNoon profile picture

Einführung

Seit COVID ist mein Kalender voll mit Stand-ups, Teambesprechungen und Kundengesprächen.


Allerdings sind die Planung einer Veranstaltung und das Einladen von Gästen langweilige Aufgaben. Eines Freitags, nachdem ich so viel Zeit damit verbracht hatte, dachte ich –

Warum verbringe ich so viel Zeit damit?

ernsthaft frustriert GIF

Daher kam ich auf die Idee, einen Event-Scheduler zu erstellen, um meine Arbeit zu vereinfachen!


In diesem Artikel zeige ich Ihnen, wie Sie eine Nodejs-Anwendung erstellen, die Ereignisse erstellen und automatisch E-Mail-Einladungen mit Google Meet-Links versenden kann.


Aufgeregt? Ich auch.


Also, ohne weitere Verzögerung!


Lasst uns beginnen!

Projektaufbau:

1. Node.js-Projekt erstellen:

Um unser Projekt zu starten, müssen wir eine Node.js-Umgebung einrichten. Lassen Sie uns also ein Node-Projekt erstellen. Führen Sie den folgenden Befehl im Terminal aus.

 npm init -y


Dadurch wird ein neues Node.js-Projekt initialisiert.

2. Abhängigkeiten installieren:

Jetzt installieren wir die erforderlichen Abhängigkeiten unseres Projekts.

 npm install express googleapis dotenv


Dadurch werden die folgenden Pakete installiert:

  • express: ein beliebtes Web-Framework für Node.js


  • dotenv: lädt Umgebungsvariablen aus einer .env Datei.


  • googleapis: Bietet Zugriff auf verschiedene Google-APIs

3. Umgebungsvariablen einrichten:

Als Nächstes erstellen wir einen .env Ordner, um unsere vertraulichen Informationen wie API-Anmeldeinformationen sicher zu speichern.

 //.env PORT = YOUR_PORT || 8000 CLIENT_ID = YOUR_CLIENT_ID CLIENT_SECRET = YOUR_CLIENT_SECRET REDIRECT_URL = http://localhost:8000/auth/redirect API_KEY = YOUR_API_KEY

4. Express-Server erstellen:

Jetzt erstellen wir eine Datei index.js im Stammverzeichnis und richten einen einfachen Express-Server ein. Siehe den folgenden Code:

 const express = require("express"); const dotenv = require("dotenv"); dotenv.config(); const app = express(); const port = process.env.PORT || 8000; app.get("/", (req, res) => { res.send("Hello World"); }); app.listen(port, () => { console.log(`Server running on port ${port}`); });

Hier verwenden wir das Paket „dotenv“, um auf die PORT-Nummer aus der .env Datei zuzugreifen.


Oben im Projekt laden wir Umgebungsvariablen mit dotenv.config() um sie in der gesamten Datei zugänglich zu machen.

Einrichten der Google Console

Zuerst gehen wir zur Google Cloud Console .


Dann erhalten wir dieses Dashboard. (Ich habe zuvor ein Projekt erstellt, deshalb erhalte ich dieses, Sie erhalten möglicherweise etwas anderes.)

Google Cloud Console

Jetzt klicken wir auf die Schaltfläche „Neues Projekt“, um ein neues Projekt zu starten.

Neue Projektseite


Als nächstes erhalten wir so etwas. Hier fügen wir den Namen und die Organisation unseres Projekts hinzu. Für dieses Projekt behalte ich es als „Mail-integration-Demo“. Dann klicken wir auf die Schaltfläche „Erstellen“, um fortzufahren


Neue Projektdetails

Als Nächstes finden wir in der seitlichen Navigationsleiste „APIs und Dienste“. In diesem Abschnitt gibt es ein Untermenü zum Aktivieren von APIs und Diensten. Klicken Sie darauf, um fortzufahren.

APIs und Dienste

Als Nächstes aktivieren wir die API, die wir in diesem Projekt verwenden werden, also die Google Kalender-API.

Google Kalender API

Danach gehen wir zum OAuth-Zustimmungsbildschirm. Hier wählen wir den Benutzertyp „Extern“ aus. Und wir klicken auf die Schaltfläche „Erstellen“, um fortzufahren.

OAuth-Zustimmungsbildschirm


Anschließend gehen wir zur App-Registrierungsseite. Hier fügen wir weitere Informationen zu unserer Anwendung hinzu. Wir beginnen mit dem Namen unserer App und einer E-Mail-Adresse für den Benutzersupport.


Für dieses Projekt werde ich es „Arindams Mail-Integration“ nennen und für den Support meine eigene E-Mail-Adresse verwenden.

App-Informationsseite

Als nächstes müssen wir den Umfang der Anwendung definieren.

Seite „Bereiche“

In den Bereichen fügen wir die erforderlichen Berechtigungen wie userinfo.email und userinfo.profile für dieses Projekt hinzu.

Ausgewählte Bereiche

Danach fügen wir unserer Anwendung einen Testbenutzer hinzu.

Seite „Testbenutzer“

Das ist alles. Unsere Anwendung ist bei der Plattform registriert.


Jetzt erstellen wir unser OAuth-Client-ID-Geheimnis. Dazu gehen wir zum Abschnitt „Anmeldeinformationen erstellen“.

Google Console-Dashboard

Hier fügen wir den Typ unserer Anwendung und ihren Namen hinzu. Für dieses Projekt handelt es sich um eine Webanwendung und ihr Name lautet Arindam's Mail Demo.

OAuth-Client-ID

Außerdem haben wir eine Umleitungs-URL hinzugefügt. Für dieses Projekt lautet sie http://localhost:8000/auth/redirect .

Umleitungs-URLs

Und dann erhalten wir die OAuth-Anmeldeinformationen.

OAuth-Client erstellt

Als Nächstes erstellen wir API-Schlüssel.

Seite zur API-Schlüsselgenerierung

Nachdem wir all dies getan haben, aktualisieren wir unsere .env Datei mit den API-Schlüsseln und den OAuth-Anmeldeinformationen, die wir zuvor generiert haben.


Damit haben wir unsere Google Cloud-Konsole für dieses Projekt eingerichtet. Fahren wir nun mit dem nächsten Abschnitt fort.

OAuth 2-Authentifizierung:

Bis jetzt haben wir unser grundlegendes Projekt-Setup abgeschlossen. Jetzt integrieren wir die OAuth2-Authentifizierung in unser Projekt. Dadurch kann unsere Anwendung sicher mit Google-Diensten interagieren. Dazu importieren wir zunächst die erforderlichen Pakete in die Datei index.js .

 const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');


Anschließend definieren wir den erforderlichen Zugriffsumfang für die Google Kalender-API.

 const scopes = ['https://www.googleapis.com/auth/calendar'];


Als Nächstes konfigurieren wir den OAuth 2-Client mit den Anmeldeinformationen, die wir in der .env Datei gespeichert haben.

 // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL );


Nach der OAuth 2-Konfiguration erstellen wir eine Route zur Authentifizierung unserer Benutzer.

 app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } );

Wenn unsere Benutzer diesen Weg wählen, werden sie auf die Authentifizierungsseite von Google weitergeleitet, wo sie nach bestimmten Berechtigungen für unsere Anwendung gefragt werden.


Nach erfolgreicher Authentifizierung leitet Google den Benutzer zu unserer Weiterleitungs-URL ( /auth/redirect ) weiter.

 app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );


Hier erhalten wir die Aktualisierungstoken aus der Abfrage und speichern sie als Anmeldeinformationen im oauth2Client . Diese Anmeldeinformationen helfen uns dabei, Anfragen an die Google Kalender-API zu stellen.


Hier ist der vollständige Code für index.js :

 //index.js const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv'); const app = express(); dotenv.config(); const port = process.env.PORT || 8000; app.get('/', (req, res) => { res.send('Hello World'); } ); // Define the scope of access for the Google Calendar API. const scopes = ['https://www.googleapis.com/auth/calendar']; // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL ); app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } ); app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );

Ereignisse im Google Kalender planen

Hier kommt der wichtigste Teil! In diesem Abschnitt planen wir ein Ereignis in Google Kalender!


Zu Beginn initialisieren wir den Google Kalender API-Client.

 const calendar = google.calendar({ version: 'v3', auth: oauth2Client });


Als Nächstes erstellen wir ein Ereignisobjekt, in das wir alle Details des Ereignisses einfügen, beispielsweise Zusammenfassung, Ort, Start- und Endzeit usw.

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, };

Danach erstellen wir eine Route ( /create-event ), wo wir das Ereignis erstellen.


Hier fügen wir mit der Methode calendar.events.insert() ein Ereignis in den Kalender des Benutzers ein.

 app.get('/create-event', async (req, res) => { try { const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client, resource: event }); res.send({ status: 200, message: 'Event created', }); } catch (err) { console.log(err); res.send(err); } } );

Damit können wir Ereignisse dynamisch im Google Kalender planen.

Google Meet-Link hinzufügen:

Bisher haben wir untersucht, wie man ein einfaches Ereignis in Google Kalender erstellt. In diesem Abschnitt erfahren Sie, wie Sie diesem Ereignis einen Google Meet-Link hinzufügen!


Dazu aktualisieren wir das Ereignisobjekt, das wir im vorherigen Abschnitt erstellt haben. Wir fügen eine Eigenschaft conferenceData hinzu, um die Erstellungsanforderung für einen Google Meet-Link anzugeben.

 conferenceData: { createRequest: { requestId: uuid(), } },


Wir fügen auch eine attendees hinzu, um Gäste zum Event einzuladen. Hier ist ein einfaches Beispiel dafür:

 attendees: [ {email: '[email protected]'}, ]


Jetzt sieht das Event-Objekt folgendermaßen aus:

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, colorId: 1, conferenceData: { createRequest: { requestId: uuid(), } }, attendees: [ {email: '[email protected]'}, ] };


Als Nächstes fügen wir im Schritt zum Einfügen des Ereignisses den Parameter conferenceDataVersion hinzu.

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1, resource: event });


Dadurch wird ein Event mit einem Google Meet-Link erstellt. Wir können den Link auch als Antwort wie folgt teilen:

 res.send({ status: 200, message: 'Event created', link: result.data.hangoutLink });

Erinnerung an die Teilnehmer senden:

Wir sind also fast fertig mit unserem Projekt, es fehlt nur noch der letzte Schliff. Bis jetzt fügt unser Projekt die Veranstaltung direkt zum Kalender der eingeladenen Gäste hinzu.


Um sie jedoch über diese Ereignisse zu benachrichtigen, müssen wir eine E-Mail senden. Dazu müssen wir im Teil zur Ereigniserstellung einen Parameter sendUpdates: 'all', hinzufügen. Damit sendet die Anwendung automatisch E-Mails an die eingeladenen Gäste.

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });

Mit dieser Ergänzung verarbeitet unser Projekt jetzt nahtlos sowohl die Ereigniserstellung als auch E-Mail-Benachrichtigungen.

Testen der Anwendung:

Der Codierungsteil unseres Projekts ist abgeschlossen. Jetzt wollen wir sehen, ob es funktioniert oder nicht!


Dafür starten wir das Projekt!

 npm run start


Und wir haben unseren Server auf Port 8000 gestartet! Jetzt gehen wir zur Route http://localhost:8000/auth/, um den Benutzer zu authentifizieren. Sie leitet uns zu etwas wie diesem weiter:

Anmeldungsseite

Sie werden um einige Berechtigungen für die Anwendung gebeten.

Berechtigungsseite

Es erfolgt eine Weiterleitung zur Route /auth/redirect mit dem Abfrageparameter code .

/auth/Route umleiten

Nachdem der Benutzer erfolgreich authentifiziert wurde, wechseln wir zur Route http://localhost:8000/create-event, um das Ereignis zu planen.

http://localhost:8000/Erstellen-Ereignis-Route

Fantastisch! Das bedeutet, dass unsere Veranstaltung mit einem Google Meet-Link erstellt wird.


Um zu überprüfen, ob der Prozess zur Ereigniserstellung ordnungsgemäß funktioniert, überprüfen wir unseren Google Kalender

Google Kalender

Fantastisch! Unser Event wurde erstellt, was bedeutet, dass der Event-Erstellungsprozess einwandfrei funktioniert! Außerdem haben wir eine Einladungsmail erhalten:

E-Mail mit Veranstaltungseinladung.

Großartig! Unsere Anwendung funktioniert perfekt!


Damit haben wir Google Kalender in unsere Node.js-App integriert. In den folgenden Artikeln werden wir weitere Anwendungsfälle mit Google Kalender untersuchen.


Bis dahin, bleiben Sie dran!

Abschluss

Wenn Sie diesen Blogbeitrag hilfreich fanden, teilen Sie ihn bitte mit anderen, die davon profitieren könnten. Sie können mir auch folgen, um weitere Inhalte zu Javascript, React und anderen Webentwicklungsthemen zu erhalten.


Für eine bezahlte Zusammenarbeit schreiben Sie mir eine E-Mail an: [email protected]


Verbinden Sie sich mit mir auf Twitter , LinkedIn , YouTube und GitHub .


Vielen Dank fürs Lesen :)

Danke