使用Laravel Http类上传Cloudflare Worker模块遇问题求助
Laravel Http类上传Cloudflare Worker脚本报错解决方案
问题回顾
使用Laravel Http类上传worker.js到Cloudflare时出现两类错误:
- 初始请求返回
workers.api.error.content_type错误 - 修改请求头或上传方式后,出现
Uncaught SyntaxError: Unexpected token 'export'错误
初始代码
$response = Http::baseUrl(self::BASE_URL) ->withHeaders(['Content-Type' => 'multipart/form-data']) ->withHeaders($this->getAuthHeaders()) ->withUrlParameters([ 'account_id' => $this->accountId, 'worker_name' => $workerName ]) ->withBody(file_get_contents(resource_path('js/worker.js'))) ->put('accounts/{account_id}/workers/scripts/{worker_name}');
对应错误
错误1
"errors": [ { "code": 10001, "message": "workers.api.error.content_type" } ]
错误2
"errors": [ { "code": 10001, "message": "Uncaught SyntaxError: Unexpected token 'export'\n at worker.js:1\n" } ]
解决方案
1. 修正请求头与上传方式
Cloudflare模块Worker的上传接口有明确要求:
- 请求头
Content-Type必须设为application/javascript+module - 直接将脚本内容作为请求体发送,无需使用
multipart/form-data或attach方法
修改后的代码:
$response = Http::baseUrl(self::BASE_URL) // 合并认证头与正确的Content-Type ->withHeaders(array_merge($this->getAuthHeaders(), [ 'Content-Type' => 'application/javascript+module', ])) ->withUrlParameters([ 'account_id' => $this->accountId, 'worker_name' => $workerName ]) // 明确指定请求体的Content-Type ->withBody( file_get_contents(resource_path('js/worker.js')), 'application/javascript+module' ) ->put('accounts/{account_id}/workers/scripts/{worker_name}');
2. 脚本与权限排查
- 验证Worker脚本格式:确保
worker.js是标准ES模块,导出语法需符合规范,示例:export default { async fetch(request) { return new Response('Hello World'); } }; - 检查认证信息:确认
getAuthHeaders()返回的头包含有效权限,比如Bearer Token或X-Auth-Email+X-Auth-Key组合 - 确认Worker命名与权限:确保
worker_name符合Cloudflare命名规则,且当前账户拥有该Worker的编辑权限
内容的提问来源于stack exchange,提问作者Taha Mohamed
相关产品推荐
相关产品推荐

