paint-brush
如何在 NodeJs 中构建事件调度程序经过@arindam1729
新歷史

如何在 NodeJs 中构建事件调度程序

经过 Arindam Majumder 12m2024/08/18
Read on Terminal Reader

太長; 讀書

在本文中,我将向您展示如何创建一个 Node.js 应用程序,该应用程序可以创建事件并自动发送带有 Google Meet 链接的电子邮件邀请。我们将使用 Express 框架来创建事件调度程序。首先,我们需要设置一个 node.js 环境并设置一个 Express 服务器。
featured image - 如何在 NodeJs 中构建事件调度程序
Arindam Majumder  HackerNoon profile picture

介绍

自疫情爆发以来,我的日程表上排满了站立会议、团队会议和客户电话。


然而,安排活动和邀请客人是一件无聊的事情。一个星期五,在这些事情上花了太多时间后,我想——

我为什么要在这上面花这么多时间?

非常沮丧 GIF

因此,我有了创建一个事件调度程序来简化我的工作的想法!


在本文中,我将向您展示如何创建一个 Nodejs 应用程序,该应用程序可以创建事件并自动发送带有 Google Meet 链接的电子邮件邀请。


兴奋吗?我也是。


所以,不要再拖延了!


让我们开始吧!

项目设置:

1.创建Node.js项目:

要启动我们的项目,我们需要设置一个 Node.js 环境。因此,让我们创建一个节点项目。在终端中运行以下命令。

 npm init -y


这将初始化一个新的 Node.js 项目。

2.安装依赖项:

现在,我们将安装项目所需的依赖项。

 npm install express googleapis dotenv


这将安装以下软件包:

  • express:一个流行的 Node.js Web 框架


  • dotenv:从.env文件加载环境变量。


  • googleapis:提供对各种 Google API 的访问

3.设置环境变量:

接下来,我们将创建一个.env文件夹来安全地存储我们的敏感信息,例如 API 凭证。

 //.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服务器:

现在我们在根目录下创建一个index.js文件,并设置一个基本的 express 服务器。参见以下代码:

 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}`); });

在这里,我们使用“dotenv”包从.env文件访问 PORT 号。


在项目的顶部,我们使用dotenv.config()加载环境变量,以使其在整个文件中可访问。

设置Google控制台

首先,我们将进入Google Cloud Console


然后我们将获得这个仪表板。(我之前已经创建了一个项目,这就是我获得它的原因,您可能会获得其他东西)。

Google 云端控制台

现在,我们点击“新项目”按钮来开始一个新项目。

新项目页面


接下来,我们将得到类似这样的结果。在这里,我们将添加项目的名称和组织。对于这个项目,我将其保留为“Mail-integration-Demo”。然后我们将单击创建按钮继续


新项目详情

接下来,在侧面导航栏中,我们会看到“API 和服务”。在此部分中,有一个子菜单用于启用 API 和服务。我们点击它继续。

API 和服务

接下来,我们将启用在此项目中使用的 API,即 Google Calender API。

Google 日历 API

之后,我们将进入 OAuth 同意屏幕。在这里,我们将选择用户类型为外部。然后我们将按创建按钮继续。

OAuth 同意屏幕


然后,我们将进入应用程序注册页面。在这里,我们将添加有关应用程序的更多信息。我们首先添加应用程序的名称和用户支持的电子邮件地址。


对于这个项目,我将其命名为“Arindam 的邮件集成”,并使用我自己的电子邮件地址来提供支持。

应用信息页面

接下来,我们必须定义应用程序的范围。

范围页面

在范围中,我们将为该项目添加必要的权限,例如userinfo.emailuserinfo.profile

选定范围

之后,我们将向我们的应用程序添加一个测试用户。

测试用户页面

就这样,我们的应用程序就注册到平台上了。


现在,我们将创建 OAuth 客户端 ID 密钥。为此,我们将转到“创建凭据”部分。

Google 控制台信息中心

在这里,我们将添加应用程序的类型及其名称。对于这个项目,它是一个 Web 应用程序,其名称为 Arindam's Mail Demo。

OAuth 客户端 ID

此外,我们添加了一个重定向 URL。对于本项目,它将是http://localhost:8000/auth/redirect

重定向 URL

然后我们将获得 OAuth 凭证。

OAuth 客户端已创建

接下来,我们将创建 API 密钥。

API 密钥生成页面

完成所有这些操作后,我们将使用之前生成的 API 密钥和 OAuth 凭据更新我们的.env文件。


这样,我们就为这个项目设置了 Google Cloud 控制台,现在让我们进入下一部分

OAuth 2 身份验证:

到目前为止,我们已经完成了基本的项目设置。现在,我们将把 OAuth2 身份验证集成到我们的项目中。这使我们的应用程序能够安全地与 Google 服务交互。为此,首先,我们将所需的包导入index.js文件。

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


然后我们将定义 Google 日历 API 所需的访问范围。

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


接下来,我们将使用存储在.env文件中的凭据配置 OAuth 2 客户端。

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


OAuth 2 配置之后,我们将创建一个路由来验证我们的用户。

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

当我们的用户走这条路线时,他们将被重定向到 Google 的身份验证页面,该页面将向我们的应用程序请求特定的权限。


身份验证成功后,Google 会将用户重定向到我们的重定向 URL ( /auth/redirect )

 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.'); } );


在这里,我们从查询中获取刷新令牌并将其作为凭据存储在oauth2Client中。这些凭据将帮助我们向 Google 日历 API 发出请求。


以下是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.'); } );

在 Google 日历上安排活动

最重要的部分来了!在本部分中,我们将在 Google 日历上安排活动!


首先,我们将初始化 Google 日历 API 客户端。

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


接下来,我们将创建一个事件对象,其中我们将添加事件的所有详细信息,例如摘要、地点、开始和结束时间等。

 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' }, };

之后,我们将创建一个路线( /create-event ),在那里我们将创建事件。


这里我们使用calendar.events.insert()方法在用户的日历中插入一个事件。

 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); } } );

有了它,我们就可以在 Google 日历上动态安排活动。

添加 Google Meet 链接:

到目前为止,我们已经探索了如何在 Google 日历上创建一个简单的活动。在本节中,我们将探索如何将 Google Meet 链接添加到该活动!


为此,我们将更新上一节中创建的事件对象。我们将添加conferenceData属性来指定 Google Meet 链接的创建请求。

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


我们还将添加一个attendees属性来邀请嘉宾参加活动。这是一个简单的例子:

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


现在,Event 对象如下所示:

 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]'}, ] };


接下来,在事件插入步骤中,我们将向其中添加conferenceDataVersion参数。

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


这将创建一个带有 Google Meet 链接的活动。我们还可以像这样以响应方式分享链接:

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

向与会者发送提醒:

所以,我们的项目几乎已经完成了,只剩下最后的润色。到目前为止,我们的项目将直接将活动添加到受邀嘉宾的日历中。


但是,为了通知他们这些事件,我们必须发送一封邮件。为此,我们必须在事件创建部分添加一个参数sendUpdates: 'all', 。这样,应用程序就会自动向受邀嘉宾发送电子邮件。

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

通过这一附加功能,我们的项目现在可以无缝处理事件创建和电子邮件通知。

测试应用程序:

我们的项目的编码部分已经完成。现在,让我们看看它是否能正常工作!


为此,我们将启动这个项目!

 npm run start


现在我们已经在端口 8000 上启动了服务器!现在,我们将转到http://localhost:8000/auth/路由来验证用户身份。它将把我们重定向到如下位置:

登录页面

它将为应用程序请求一些权限。

权限页面

它将使用code查询参数重定向到/auth/redirect路由。

/auth/redirect 路由

成功验证用户后,我们将转到http://localhost:8000/create-event路由来安排事件。

http://localhost:8000/create-event 路线

太棒了!这意味着我们的活动是使用 Google Meet 链接创建的。


为了验证事件创建过程是否正常运行,让我们检查一下 Google 日历

Google 日历

太棒了!我们的活动创建成功了,这意味着活动创建路线运行正常!我们还收到了一封邀请邮件:

活动邀请邮件。

太棒了!我们的应用程序运行完美!


这样,我们就将 Google 日历集成到了我们的 Node.js 应用中。在接下来的文章中,我们将探索更多使用 Google 日历的案例。


至此,敬请关注!

结论

如果您发现这篇博文有用,请考虑与可能受益的其他人分享。您也可以关注我,了解有关 Javascript、React 和其他 Web 开发主题的更多内容。


对于付费合作,请发邮件至: [email protected]


通过TwitterLinkedInYouTubeGitHub与我联系。


感谢您的阅读:)

谢谢