Примечание
По состоянию на 22 февраля 2023 года Vercel официально предлагает встроенные задания Cron для запуска ваших функций без сервера и краев. Прочитайте документацию, чтобы узнать больше. Имейте в виду, что эта функция бесплатна только во время бета -фазы, она станет платной функцией для общей доступности, что означает, что маршрут действий GitHub останется актуальной для полностью бесплатной опции.
Работа Cron с действиями GitHub для приложений Next.js на Vercel ▲
Поскольку платформа Vercel основана на событиях, поэтому не поддерживает работающий сервер, вы не можете запланировать вызовы на свои маршруты API или без серверов в вашем приложении Next.js. Хотя существует много ранее существовавших услуг, которые предоставляют запланированные рабочие места Cron, я в конечном итоге решил, что GitHub Действия соответствуют мне наилучшим образом, поскольку он прекрасно интегрируется с любым проектом, который уже живет на GitHub, плюс это совершенно бесплатно.
Все действия GitHub находятся в каталоге .github/workflows/ вашего репозитория и написаны в YAML.
.github/workflows/starter.yaml - самый базовый рабочий процесс, который поможет вам начать работу с действиями.
С запланированными событиями вы можете выполнять задачи с указанными интервалами. Например, предоставленный рабочий процесс .github/workflows/scheduled.yaml выполняет HTTP -запрос с Curl каждые 60 минут.
name : Hourly cron job
on :
schedule :
- cron : ' */60 * * * * '
jobs :
cron :
runs-on : ubuntu-latest
steps :
- name : Hourly cron job
run : |
curl --request POST
--url 'https://example.com/api/task'
--header 'Authorization: Bearer ${{ secrets.ACTION_KEY }}'Если у вас возникли проблемы с написанием выражений Cron, взгляните на Crontab Guru.
Маршруты API и функции без серверов обеспечивают простое решение для создания вашего API с помощью Next.js на Vercel. Любой файл внутри pages/api сопоставлен с /api/* и будет рассматриваться как конечная точка API вместо page .
Если вы используете функции без сервера, независимо от времени выполнения, вам нужно поместить файлы в /api/ каталог в корне вашего проекта.
Чтобы безопасно запустить маршруты API и без сервера с помощью действий GitHub, вам необходимо предоставить ключ авторизации в заголовке вашего вызова API, который при выполнении сравнивается с соответствующим ключом в вашем приложении Next.js.
Вы можете достичь этого, добавив зашифрованные секреты в ваш репозиторий GitHub и передавая их с заголовком вашего HTTP -запроса, как показано в предыдущем фрагменте кода. Наряду с добавлением ключа к вашему репозиторию GitHub, вам также необходимо получить доступ к нему в вашем приложении Next.js, предпочтительно через переменные среды.
Примеры pages/api/example.js реализуют этот поток авторизации.
export default function handler ( req , res ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
} Используйте pages/api/example.ts для TypeScript.
import type { NextApiRequest , NextApiResponse } from 'next'
export default function handler ( req : NextApiRequest , res : NextApiResponse ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
}