-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcache-example.ts
More file actions
66 lines (57 loc) · 2.48 KB
/
cache-example.ts
File metadata and controls
66 lines (57 loc) · 2.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* Exemplo de Cache com Versionamento Automático
* RouterWorkers v0.3.0+
*/
import { RouterWorkers } from '../src/index';
import type { Req, Res, ConfigWorker } from '../types/index';
// A interface Env é necessária para que o TypeScript reconheça
// as variáveis de ambiente injetadas pelo Cloudflare, como CF_VERSION_METADATA.
interface Env {
CF_VERSION_METADATA: {
id: string;
timestamp: string;
tag: string;
};
}
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
// 1. Obtenha o ID único da implantação a partir das variáveis de ambiente.
// Este valor muda automaticamente a cada `wrangler deploy`.
const deploymentId = env.CF_VERSION_METADATA.id;
// 2. Configure o RouterWorkers para usar o cache.
// A propriedade 'version' agora é o ID dinâmico da implantação.
const config: ConfigWorker = {
cache: {
pathname: ['/data'], // A rota que queremos cachear
maxage: '3600', // Tempo de vida do cache em segundos (1 hora)
version: deploymentId // Chave de versionamento automático
}
};
const app = new RouterWorkers(request, config);
/**
* Esta rota será cacheada.
* Na primeira vez que for acessada, o código abaixo será executado.
* Nas próximas requisições (dentro da mesma implantação), a resposta virá direto do cache.
* Quando um novo deploy for feito, o `deploymentId` mudará, o cache antigo será ignorado,
* e esta função será executada novamente na primeira requisição.
*/
await app.get('/data', (req: Req, res: Res) => {
console.log('Executando a lógica da rota /data (não veio do cache)');
const responseData = {
message: 'Estes são dados frescos, servidos diretamente pela função.',
timestamp: new Date().toISOString(),
deploymentId: deploymentId
};
res.ok(responseData);
});
// Rota não cacheada
await app.get('/', (req: Req, res: Res) => {
res.html(`
<h1>Exemplo de Cache Automático</h1>
<p>Acesse <a href="/data">/data</a> para ver a mágica do cache.</p>
<p>ID da Implantação Atual: <code>${deploymentId}</code></p>
`);
});
return app.resolve();
}
};