编写事件 webhook
现在,我们转到第二个用例:当用户在应用程序上注册时发送电子邮件。
当用户使用 Auth0 在应用程序上注册时,我们会在users
表中添加新的一行,以保持用户数据的同步。 还记得我们在注册时编写的用来进行更改的 Auth0 规则吗?
这是在表users
上的insert
操作。
每个事件的有效负载都记录在此处
现在,我们将捕获此插入操作,以触发我们的事件。
SendGrid SMTP 电子邮件 API
对于这个例子,我们将利用SendGrid
的 SMTP 服务器,然后使用nodemailer
发送电子邮件。
在 SendGrid 上注册并创建一个免费帐户。
按照此处的文档创建一个 API 密钥
编写 webhook
const nodemailer = require('nodemailer');const transporter = nodemailer.createTransport('smtp://'+process.env.SMTP_LOGIN+':'+process.env.SMTP_PASSWORD+'@' + process.env.SMTP_HOST);const fs = require('fs');const path = require('path');const express = require('express');const bodyParser = require('body-parser');const app = express();app.set('port', (process.env.PORT || 3000));app.use('/', express.static(path.join(__dirname, 'public')));app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: true}));app.use(function(req, res, next) {res.setHeader('Access-Control-Allow-Origin', '*');res.setHeader('Cache-Control', 'no-cache');next();});app.post('/send-email', function(req, res) {const name = req.body.event.data.new.name;// setup e-mail dataconst mailOptions = {from: process.env.SENDER_ADDRESS, // sender addressto: process.env.RECEIVER_ADDRESS, // list of receiverssubject: 'A new user has registered', // Subject linetext: 'Hi, This is to notify that a new user has registered under the name of ' + name, // plaintext bodyhtml: '<p>'+'Hi, This is to notify that a new user has registered under the name of ' + name + '</p>' // html body};// send mail with defined transport objecttransporter.sendMail(mailOptions, function(error, info){if(error){return console.log(error);}console.log('Message sent: ' + info.response);res.json({'success': true});});});app.listen(app.get('port'), function() {console.log('Server started on: ' + app.get('port'));});
部署
环境变量
在 Glitch 上重新组合你自己的项目后,请修改.env
文件,以正确输入
SMTP_LOGIN
、SMTP_PASSWORD
等SMTP_HOST
值。
此外,你还应使用环境变量配置发件人和收件人的
SENDER_ADDRESS
RECEIVER_ADDRESS
地址。
恭喜! 你已编写并部署你的第一个处理数据库事件的 webhook。
Did you find this page helpful?
Start with GraphQL on Hasura for Free
- Build apps and APIs 10x faster
- Built-in authorization and caching
- 8x more performant than hand-rolled APIs