Observação
A partir de 22 de fevereiro, 2023 A Vercel está oferecendo oficialmente trabalhos de Cron para acionar suas funções sem servidor e de ponta. Leia a documentação para saber mais. Lembre -se de que o recurso é gratuito apenas durante sua fase beta, será um recurso pago para a disponibilidade geral, o que significa que a rota de ações do GitHub permanecerá relevante para uma opção completamente gratuita.
Jobs Cron com ações do GitHub para Aplicações Next.js no Vercel ▲
Como a plataforma Vercel é orientada por eventos, portanto, não mantendo um servidor em execução, você não pode realmente agendar chamadas em suas rotas de API ou funções sem servidor no seu aplicativo Next.js. Embora existam muitos serviços pré-existentes que fornecem trabalhos cron programados, decidi que as ações do GitHub atendem às minhas necessidades melhores, pois ele se integra bem a qualquer projeto que já vive no Github, além de ser totalmente gratuito.
Todas as ações do GitHub residem no diretório .github/workflows/ do seu repositório e são escritas no YAML.
.github/workflows/starter.yaml é o fluxo de trabalho mais básico para ajudá -lo a começar com as ações.
Com eventos programados, você pode executar tarefas em intervalos especificados. Por exemplo, o fluxo de trabalho fornecido fornecido .github/workflows/scheduled.yaml executa uma solicitação HTTP com CRO a cada 60 minutos.
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 }}'Se você estiver tendo problemas para escrever expressões de cronograma do CRON, dê uma olhada no Crontab Guru.
As rotas de API e as funções sem servidor fornecem uma solução direta para criar sua API com o Next.js no vercel. Qualquer arquivo dentro das pages/api é mapeado para /api/* e será tratado como um terminal de API em vez de uma page .
Se você estiver usando funções sem servidor, independentemente do tempo de execução, precisará colocar os arquivos no /api/ diretório na raiz do seu projeto.
Para acionar com segurança rotas de API e funções sem servidor com ações do GitHub, você precisa fornecer uma chave de autorização no cabeçalho da sua chamada da API, que, quando executada, é comparada a uma chave correspondente no seu aplicativo Next.js.
Você pode conseguir isso adicionando segredos criptografados ao seu repositório do GitHub e passando -os com o cabeçalho da sua solicitação HTTP, como mostrado no snippet de código anterior. Além de adicionar a chave ao seu repositório do GitHub, você também precisa acessá -lo no seu aplicativo Next.js, de preferência através de variáveis de ambiente.
O exemplo pages/api/example.js implementa esse fluxo de autorização.
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 )
}
} Use pages/api/example.ts para 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 )
}
}