【发布时间】:2016-10-20 08:24:16
【问题描述】:
我正在尝试创建一个服务器来监听 firebase 数据库中所做的更改,然后将电子邮件发送到某个电子邮件地址。我设法实现了firebase和sendgrid,我已经通过向数据库添加一些条目并发送测试邮件进行了测试。所以 sendgrid 和 firebase 正在工作。这里的问题取决于我如何设法发送电子邮件,每次打开应用程序时它都会发送电子邮件。
所以问题来了,如果每次应用程序打开它都会执行 js 文件中的代码。当我添加代码以侦听数据库中添加的子事件时,每次打开应用程序时都会调用它,因此多个侦听器将处于活动状态,并且我假设将针对单个事件发送多封电子邮件。
所以我一无所知,无论如何这只会被调用一次吗?或者我不应该多次打开“应用程序”?还是我没有以正确的方式部署服务器?
我的目标是,一旦我部署服务器,它将自动执行其编写的操作,而无需在 heroku 中实际打开“应用程序”,或者至少在应用程序打开时不会再次调用代码,部署时只需一次。
这是 server.js 的代码
var firebase = require('firebase');
var helper = require('sendgrid').mail;
firebase.initializeApp({
serviceAccount: "./DB-A2312SDA.json",
databaseURL: "https://DATABASENAME.firebaseio.com/"
});
// Email
var from_email = new helper.Email('example@example.com');
var to_email = new helper.Email('example@gmail.com');
var subject = 'Hello World from the SendGrid Node.js Library!';
var content = new helper.Content('text/plain', 'Hello, Email!');
var mail = new helper.Mail(from_email, subject, to_email, content);
var sg = require('sendgrid')(process.env.SG_API_KEY);
var request = sg.emptyRequest({
method: 'POST',
path: '/v3/mail/send',
body: mail.toJSON(),
});
sg.API(request, function(error, response) {
console.log(response.statusCode);
console.log(response.body);
console.log(response.headers);
});
这是 package.json
{
"name": "server_test",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"engines": {
"node": "6.9.0"
},
"author": "",
"license": "ISC",
"dependencies": {
"firebase": "^3.5.1",
"sendgrid": "^4.7.0"
}
}
和过程文件
web: node server.js
【问题讨论】:
标签: node.js heroku firebase firebase-realtime-database sendgrid