firebase 데이터베이스의 변경 사항을 수신 한 다음 일부 이메일 주소로 전자 메일을 보내는 서버를 만들려고합니다. firebase와 sendgrid를 구현할 수 있습니다. 이미 데이터베이스에 항목을 추가하고 테스트 메일을 보내서 테스트했습니다. 그래서 sendgrid와 firebase가 작동합니다. 여기에서 문제는 전자 메일을 보내는 방식으로 전자 메일을 보내는 응용 프로그램을 열 때마다 전자 메일을 보내는 방식에 달려 있습니다.heroku 서버 및 파이어베이스
그래서 여기에 문제가 발생합니다. 앱이 열릴 때마다 js 파일의 코드가 실행됩니다. 데이터베이스에 자식 추가 이벤트를 수신하는 코드를 추가하면 앱을 열 때마다 호출되므로 다중 수신기가 활성화되어 하나의 이벤트에 대해 여러 개의 이메일이 전송된다고 가정합니다.
나는 우둔 해요, 어쨌든 이것이 한 번만 부름 받았습니까? 또는 "app"을 두 번 이상 열지 않아야합니까? 아니면 서버를 올바르게 배치하지 않습니까?
내 목표는 heroku에서 "앱"을 실제로 열 필요없이 서버를 배포 한 후 자동으로 서버를 배포하거나 적어도 앱이 열려있을 때 코드가 다시 호출되지 않도록하는 것입니다 배포 할 때 한 번만 여기
이는 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"
}
}
과 procfile에게 있습니다
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('[email protected]');
var to_email = new helper.Email('[email protected]');
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);
});
server.js 코드입니다
이러한 시나리오에서 일반적으로web: node server.js
그래서 실제 서버 코드가 호출 될 횟수를 제어 할 수는 없지만 데이터베이스 데이터 자체를 대신 제어 할 수 있습니까? - 다시 말하면, 다중 리스너를 활성화하는 것은 중요하지 않습니까? – Rialcom
프랭크 나는 당신의 코드를 시도했지만 예상대로 작동하지 않습니다. 앱은 특정 시간이지나거나 앱이 영웅으로 열렸을 때만 메일을 보냅니다.데이터가 데이터베이스에 추가되면 서버가 마치 한 번 누군가가 영웅 앱에 액세스하면 활성화 된 것처럼 보입니다. – Rialcom
그럴 수 있습니다. 나는 코드의 라이프 사이클을 관리 할 수있는 Heroku에서 이러한 백 엔드를 실행 한 경험이 없습니다. 덜 관리되는 환경 (예 : Digital Ocean, Google Compute Engine 또는 App Engine Flexible Environment의 node.js)에서는 이러한 프로세스가 정상적으로 실행됩니다. –