如何解决我如何编写将创建一次twilio消息的cron作业
我正在尝试让我的应用程序从Firestore中获取数据并使用该数据创建消息。我目前每分钟运行一次cron作业,以检查Firestore并使用db中的数据创建消息。但是,问题在于它每分钟运行一次,因此会多次创建相同的消息。我尝试不每分钟运行一次,只是在应用程序加载时创建消息,但是问题是如果用户在站点上创建了一条新消息,它将不会向该应用程序注册,因为该应用程序仅从数据库中获取了一次。如何通过多条消息解决此问题?
链接:https://reminder-me-website.herokuapp.com/
require('dotenv').config()
const path = require('path');
const twilio = require('twilio')
const client = twilio(
process.env.TWILIO_ACCOUNT_SID,process.env.TWILIO_AUTH_KEY)
const cronJob = require('cron').CronJob;
const express = require('express');
const bodyParser = require('body-parser');
const app = express()
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
const firebase = require("firebase/app");
require("firebase/firestore");
var config = {
apiKey: process.env.FIREBASE_API_KEY,authDomain: "reminder-app-4be61.firebaseapp.com",databaseURL: "https://reminder-app-4be61.firebaseio.com/",projectId: "reminder-app-4be61",storageBucket: "reminder-app-4be61.appspot.com",messagingSenderId: "830815988398",appId: "1:830815988398:web:597257d987ea63668a9b3f",measurementId: "G-T600ZD0201",};
firebase.initializeApp(config);
const db = firebase.firestore();
const timeFactory = (hour,midday) =>{
if(midday === 'AM' && hour === '12') {
hour = '00'
}
else if(midday === 'PM' && hour === '12') {
hour = '12'
}
else if(midday === 'PM' && Number(hour) < 12) {
hour = Number(hour) + 12
}
else if(midday === 'AM' && Number(hour) < 12) {
if(hour[0] === '0') {
hour = 0 + Number(hour)
hour = '0' + String(hour)
} else {
hour = 0 + Number(hour)
}
}
return String(hour)
}
const setReminderFrequency = (freq,date,id) => {
if('Once' === freq) {
let dayOfTheWeek = new Date(date)
let day = dayOfTheWeek.getDay()
let dayOfTheMonth = date.slice(4,6)
let monthOfTheYear = date.slice(0,3)
db.collection('reminders').doc(id).delete()
return [dayOfTheMonth,monthOfTheYear,String('0' + day)]
}
else if('Daily' === freq) {
return ['*','*','*']
}
else if('Weekly' === freq) {
let dayOfTheWeek = new Date(date)
let day = dayOfTheWeek.getDay()
return ['*',String('0' + day)]
}
else if('Monthly' === freq) {
let dayOfTheMonth = date.slice(4,6)
return [dayOfTheMonth,'*']
}
else if('Yearly' === freq) {
let monthOfTheYear = date.slice(0,3)
return ['*','*']
}
}
new cronJob('* * * * *',() => {
const fetchData = async () => {
const numbers = [];
const data = await db.collection('reminders').get()
data.docs.map( doc => numbers.push({ ...doc.data(),id: doc.id }))
for (let reminder of numbers) {
let timeframe = reminder.time.slice(6,8);
let minute = reminder.time.slice(3,5);
let hour = reminder.time.slice(0,2);
hour = timeFactory(hour,timeframe);
let frequency = setReminderFrequency(
reminder.frequency,reminder.date,reminder.id
);
var textJob = new cronJob(
`${minute} ${hour} ${frequency[0]} ${frequency[1]} ${frequency[2]}`,() => {
client.messages.create(
{
to: reminder.phoneNumber,from: "4104691056",//Why "Reminder Me" id dont work?
body: reminder.message,},(err,message) => {
console.log(message.body,err)
}
);
},null,true,reminder.timezone
);
}
}
fetchData()
},true)
app.use(express.static(path.join(__dirname,'build')));
app.get('/*',(req,res) => {
res.sendFile(path.join(__dirname,'build','index.html'));
});
var server = app.listen(process.env.PORT || 3001,() => {
console.log('Listening on port %d',server.address().port);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。