使用NodeJS调度函数



我目前有一个NodeJS后端,Postgres DB和sequelize作为我的ORM。我的数据库中有一个事务表,它以YYYY-MM-DD格式存储事务的日期。当交易的日期是今天的时候,我想用通知通知用户。

我被建议使用一个每天运行一次的cron任务,它搜索我的事务表的日期列到与今天的日期相等的日期,然后向今天交易到期的用户发送一个博览会推送通知,以进行付款。

我试着用谷歌云功能这样做,但由于某种原因,该功能没有部署。

我的问题:我正在做什么,甚至可能在调度谷歌云功能,从我的postgres数据库条目搜索?

这是我的云函数:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const moment = require('moment');
const express = require("express");
const router = express.Router();
const { Expo } = require("expo-server-sdk");
const sendPushNotification = require("../utilities/pushNotifications");
const PushToken = require("../models/Pushtoken");
const Product = require("../models/Products");
const Order = require("../models/Orders");
const Transaction = require("../models/Transactions");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.json());
app.use(express.json())
admin.initializeApp(functions.config().firebase);
exports.scheduledFunctionCrontab = functions
.pubsub
.schedule('00 11 * * *')
.onRun(async(context) => {
const now = moment();
const dateFormatted = now.format('YYYY-MM-DD');
const today =[];
const transactionDueToday = await Transaction.findAll({
where:{
date:dateFormatted
},
include: [
{ model: Order, attributes: ["id", "ProductId"],
include: [
{ model: Product, attributes: ["id", "title"] },
]
},
{ model: PushToken, attributes: ["id", "token"] },
],
})
transactionDueToday.map((x)=>{
today.push({user:x.userId,token:x.PushToken.token,productTitle:x.Order.Product.title})
})
functions.logger.log(today);
// send notification to these id's reminding then
});

上面的代码不包括发送通知。

google cloud函数可以做你在函数中写的任何事情。

如果函数环境对数据库有必要的访问,那么它应该能够运行查询并对结果做任何你需要的事情。

看起来你的NodeJS服务器不在谷歌上运行,我假设DB也是本地的。你根本不需要云功能,你可以在自己的服务器上设置调度任务,访问自己的数据库,然后只向firebase发送推送请求。

最新更新