cloudfare-workers使用方法
目录
1 入门教程
- 一个简单的dmeo
// 1. 在 Cloudflare Workers 中创建一个新的 Worker
// 这个函数为入口函数,相当于main函数。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
// 3. 处理请求。
// 创建KV并且关联后,可以直接用关联的变量明作为KV对象,使用put或get对KV进行访问。
async function handleRequest(request) {
if (request.method === 'POST' && request.url.endsWith('/clear-count')) {
// 清空页面计数
await PAGE_COUNT.put('page-views', '0')
return new Response('Page count has been reset.', {
headers: { 'Content-Type': 'text/plain' },
})
}
// 从 KV 中获取页面计数
let count = await PAGE_COUNT.get('page-views')
if (count === null) {
count = 1
} else {
count = parseInt(count, 10) + 1
}
// 构建页面内容, 使用let声明遍历那个,使用``将字符串进行包裹。
let body = `This page has been visited ${count} times. <br><button onclick="clearCount()">Clear Count</button>`
// 构建响应,使用respone生成对象
return new Response(body, {
headers: { 'Content-Type': 'text/html' },
})
}
// 4. 定义清空计数的函数,使用fetch可以发起请求。
async function clearCount() {
const response = await fetch('/clear-count', { method: 'POST' })
const result = await response.text()
console.log(result)
}
2 学习案例。
案例来源。 worker.js
- 首先来看入口函数。
/**
* Wait for requests to the worker
*/
addEventListener('fetch', event => {
const url = new URL(event.request.url)
if (url.pathname === WEBHOOK) {
event.respondWith(handleWebhook(event))
} else if (url.pathname === '/registerWebhook') {
event.respondWith(registerWebhook(event, url, WEBHOOK, SECRET))
} else if (url.pathname === '/unRegisterWebhook') {
event.respondWith(unRegisterWebhook(event))
} else {
event.respondWith(new Response('No handler for this request'))
}
})
其中URL() 构造函数返回一个新创建的 URL 对象,该对象表示由参数定义的 URL。各种使用情况如下。
// 基准 URL:
let baseUrl = "https://developer.mozilla.org";
let A = new URL("/", baseUrl);
// => 'https://developer.mozilla.org/'
let B = new URL(baseUrl);
// => 'https://developer.mozilla.org/'
new URL("en-US/docs", B);
// => 'https://developer.mozilla.org/en-US/docs'
let D = new URL("/en-US/docs", B);
// => 'https://developer.mozilla.org/en-US/docs'
new URL("/en-US/docs", D);
// => 'https://developer.mozilla.org/en-US/docs'
new URL("/en-US/docs", A);
// => 'https://developer.mozilla.org/en-US/docs'
new URL("/en-US/docs", "https://developer.mozilla.org/fr-FR/toto");
// => 'https://developer.mozilla.org/en-US/docs'
总结一下就是第一个参数是路径,与第二个参数的主机名拼接后得到新的URL。
2. 程序要求我们首先通过打开https://xxx.workers.dev/registerWebhook
来注册websoket,因此我们先看对于/registerWebhook
请求是如何处理的。代码为event.respondWith(registerWebhook(event, url, WEBHOOK, SECRET))
, 可以看到是调用了下面这个函数。
/**
* Set webhook to this worker's url
* https://core.telegram.org/bots/api## setwebhook
*/
async function registerWebhook (event, requestUrl, suffix, secret) {
// https://core.telegram.org/bots/api## setwebhook
const webhookUrl = `${requestUrl.protocol}//${requestUrl.hostname}${suffix}`
const r = await (await fetch(apiUrl('setWebhook', { url: webhookUrl, secret_token: secret }))).json()
return new Response('ok' in r && r.ok ? 'Ok' : JSON.stringify(r, null, 2))
}
- 基本看完了,js编程很好玩。