如何优化 Vercel 上的 CRON 作业,该作业因 504 超时:由于无服务器功能超过 10 秒超时限制而导致 GATEWAY_TIMEOUT 错误

问题描述 投票:0回答:1

我有一个在 Vercel 上运行的 CRON 作业。但是每当我尝试运行它时,我都会收到 504: GATEWAY_TIMEOUT 错误。我检查了 Vercel 上我的 Cron Job 函数的日志,一切似乎都很好。所以我继续对 504 状态代码进行了一些研究,我了解到这表明无服务器功能响应时间过长。Vercel 对无服务器功能的超时限制为 10 秒。所以我需要优化这段代码,使其在 10 秒的时间范围内执行。请建议优化代码。

import dbconnection from "@/lib/dbconn";
import Birthday from "@/models/Birthday";

dbconnection()
export default async function handler(req, res) {
    try {
        const query = Birthday.find({ date: new Date() }).lean();
        const birthdays = await query.exec();
        for (const birthday of birthdays) {
            const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
            const message = await client.messages.create({
                messagingServiceSid: 'MG19c8d8f851ee2e2525446fc35d1667ab',
                body: `Subramanya, Today is ${birthday.name}'s Birthday!. Don't Forget to wish🎉`,
                from: process.env.TWILIO_PHONE_NUMBER,
                to: process.env.MY_NUMBER,
            });
            console.log(`Sent message to Subramanya's Number at ${birthday.date}: ${message.sid}`);
        }
    } catch (error) {
        console.error(error);
    }
}

代码简要说明:- 我正在连接到数据库(MongoDB),然后从生日集合中查询数据并检查条件,如果满足条件,我将使用 Twillio 发送消息。这是一个 nextJS 代码,我正在使用 mongoose作为我的司机。

Error Vercel Log

mongoose next.js cron twilio vercel
1个回答
0
投票

你得到了一个

504: GATEWAY_TIMEOUT error
,因为你没有回复。您必须使用
res.send()
返回响应。 另外,您可以修改下面的代码。以便您的功能快速执行。

import dbconnection from "@/lib/dbconn";
import Birthday from "@/models/Birthday";

dbconnection()
export default async function handler(req, res) {
    try {
        await Birthday.find({ date: new Date() }).lean().then(async(birthdays)=>{
          for (const birthday of birthdays) {
              const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
              const message = await client.messages.create({
                  messagingServiceSid: 'MG19c8d8f851ee2e2525446fc35d1667ab',
                  body: `Subramanya, Today is ${birthday.name}'s Birthday!. Don't Forget to wish🎉`,
                  from: process.env.TWILIO_PHONE_NUMBER,
                  to: process.env.MY_NUMBER,
              });
              console.log(`Sent message to Subramanya's Number at ${birthday.date}: ${message.sid}`);
          }
        });
        res.send({message: "All message sent successfully."})
    } catch (error) {
        console.error(error);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.