我设法使用无服务器框架部署了我的第一个cloudflare工作者 https://serverless.com/framework/docs/providers/cloudflare/guide/ 当我碰到云时它正在工作。
在开发过程中,希望能够在http://localhost:8080/ *上进行测试
使用serverless.yml中指定的功能启动本地http服务器并处理我的请求的最简单方法是什么?
我调查了https://github.com/serverless/examples/tree/master/google-node-simple-http-endpoint 但没有“开始”脚本。
https://github.com/serverless/上似乎没有关于Cloudflare的示例
答案 0 :(得分:2)
目前,没有办法在本地运行真正的Cloudflare Workers运行时。 Workers团队知道开发人员需要此功能,但是要将核心Workers运行时与Cloudflare其余软件堆栈区分开来要花一些工夫,否则,该软件栈太复杂了,无法在本地运行。
同时,您可以尝试以下几种选择:
Cloudworker是Cloudflare Workers的仿真器,它在node.js上本地运行。它是由Dollar Shave Club的工程师建造的,该公司使用的是Workers,而不是Cloudflare。由于它是Workers环境的整个独立实现,因此它的行为方式与“真实事物”之间可能会存在很小的差异。但是,它足以完成一些工作。
可以通过API访问cloudflareworkers.com上显示的预览。使用某些curl
命令,您可以将代码上传到cloudflareworkers.com并在其上运行测试。这并不是真正的“本地”,但是如果您始终连接到Internet,则几乎是相同的。使用此API不需要任何特殊的凭据,因此您可以编写一些脚本来使用它来运行单元测试等。
通过worker.js
将名为POST
的脚本上传到https://cloudflareworkers.com/script
:
SCRIPT_ID=$(curl -sX POST https://cloudflareworkers.com/script \
-H "Content-Type: text/javascript" --data-binary @worker.js | \
jq -r .id)
现在$SCRIPT_ID
将是一个32位十六进制数字,用于标识您的脚本。请注意,该ID是基于哈希的,因此,如果您上传完全相同的脚本两次,则会获得相同的ID。
接下来,生成一个随机会话ID(32个十六进制数字):
SESSION_ID=$(head -c 16 /dev/urandom | xxd -p)
此会话ID的密码随机性非常重要,因为具有该ID的任何人都可以将devtools连接到您的预览并对其进行调试。
我们还要定义两个配置:
PREVIEW_HOST=example.com
HTTPS=1
这些参数指定当您的工作人员运行时,预览的行为应类似于在https://example.com
上运行的行为。传入请求的URL和Host
标头将被重写为该协议和主机名。如果网址应为HTTPS,则设置HTTPS=1
;否则,请设置HTTPS=0
。
现在,您可以像以下方式向您的工作人员发送请求:
curl https://00000000000000000000000000000000.cloudflareworkers.com \
-H "Cookie: __ew_fiddle_preview=$SCRIPT_ID$SESSION_ID$HTTPS$PREVIEW_HOST"
(32个零可以是任何十六进制数字。在浏览器中使用预览时,它们是随机生成的,以防止cookie和缓存的内容在整个会话中相互干扰。但是,在使用curl时,这没有关系,因此全零是可以的。)
您可以更改此curl
行,以在URL中包含路径,使用其他方法(例如-X POST
),添加标头等。只要显示了主机名和cookie,它将交给您的预览工作人员。
最后,您可以连接devtools控制台以在Chrome中进行调试(不幸的是,当前仅在Chrome中有效):
google-chrome https://cloudflareworkers.com/devtools/inspector.html?wss=cloudflareworkers.com/inspect/$SESSION_ID&v8only=true
请注意,上述API目前尚未正式记录,并且可能会在将来进行更改,但是通过在浏览器中打开cloudflareworkers.com
并查看其发出的请求,应该相对容易找出更改。
答案 1 :(得分:0)
您还可以通过将Cloudflare worker加载为服务worker来进行本地测试。
注意:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<!-- Service worker registration -->
<script>
if ('serviceWorker' in navigator) {
// Register the ServiceWorker
navigator.serviceWorker.register('/service-worker.js')
.then(
function(reg) {
// Registration succeeded
console.log('[registerServiceWorker] Registration succeeded. Scope is ' + reg.scope)
window.location.reload(true)
})
.catch(
function(error) {
// Registration failed
console.log('[registerServiceWorker] Registration failed with ' + error)
})
} else {
console.log('[registerServiceWorker] Service workers aren\'t supported')
}
</script>
</body>
</html>
答案 2 :(得分:0)
美元共享俱乐部创建了Cloudworker。它没有得到积极维护,但是它是在本地运行Cloudflare Workers的一种方式。
您可以在Cloudworker的原始维护者在来宾帖子的Cloudflare blog上阅读有关内容。