您好,我已使用以下命令将我的 Vue.js 应用程序部署到 Cloudflare 工作人员:
wrangler generate --site
wrangler publish --env dev
Run Code Online (Sandbox Code Playgroud)
这是我的 wrangler.toml:
account_id = "xxx"
name = "name"
type = "webpack"
workers_dev = true
[site]
bucket = "./dist"
entry-point = "workers-site"
[env.dev]
name = "name"
route = "xxx.com/*"
zone_id = "XXX"
account_id = "XXX"
Run Code Online (Sandbox Code Playgroud)
该网站很好并且位于“xxx.com”上,但是当我在任何其他路线上刷新页面时,我收到以下错误消息:
在您的内容命名空间中找不到 es-es/index.html
或者例如:
在您的内容命名空间中找不到 category/65/index.html
在 nginx 上,我必须创建一个 .htaccess,但我不知道如何让它在这里工作。
这是我的 index.js 以防万一:
import { getAssetFromKV, mapRequestToAsset } from '@cloudflare/kv-asset-handler'
/**
* The DEBUG flag will do two things that help during development:
* …
Run Code Online (Sandbox Code Playgroud) 我按照本指南通过 cloudflare 工作人员将机密添加到我的产品环境中:
https://developers.cloudflare.com/workers/platform/environment-variables/#comparing-secrets-and-environment-variables
我可以通过 添加新的机密wrangler secret put
,并且可以在仪表板中看到它们。当我使用 wrangler 在本地运行代码时,看起来变量并未被注入。我收到这样的错误:
Uncaught ReferenceError: TOKEN is not defined
at line 0
at throwFetchError (/Users/justin.beckwith/.nvm/versions/node/v16.14.0/lib/node_modules/wrangler/wrangler-dist/cli.js:134316:17)
at fetchResult (/Users/justin.beckwith/.nvm/versions/node/v16.14.0/lib/node_modules/wrangler/wrangler-dist/cli.js:134287:5)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async previewToken (/Users/justin.beckwith/.nvm/versions/node/v16.14.0/lib/node_modules/wrangler/wrangler-dist/cli.js:134658:29)
at async createWorker (/Users/justin.beckwith/.nvm/versions/node/v16.14.0/lib/node_modules/wrangler/wrangler-dist/cli.js:134675:17)
at async start (/Users/justin.beckwith/.nvm/versions/node/v16.14.0/lib/node_modules/wrangler/wrangler-dist/cli.js:136075:16) {
Run Code Online (Sandbox Code Playgroud)
我知道秘密已经设置,据我所知,这些值应该是自动注入的。关于我在这里缺少什么有什么想法吗?谢谢你!
我有一个 CloudFlare Worker,在 CF 设置..环境变量界面中设置了环境变量。我也有这个 wrangler.toml
在我的工作人员的 index.js 中,我有读取变量 REGISTRATION_API_URL 的代码。如果代码在已部署的环境中运行,那么它会将 CF 设置中的值注入 REGISTRATION_API_URL 中。
但如果我运行
wrangler dev
或
wrangler dev --env local
则 REGISTRATION_API_URL 未定义。
最初我预计该变量将由 CF 设置值填充,但事实并非如此。所以我尝试了这里显示的 wrangler.toml 中的两个变量设置,但没有区别。我花了很多时间搜索文档和更大的网络。
本地开发环境是否支持环境变量?人们想出了任何解决方法吗?目前我正在寻找未定义的变量并使用硬编码值定义变量,但这不是一个很好的答案。
使用牧马人1.16.0
谢谢。
您好,我在 Cloudflare 工作人员中收到以下错误
\nA hanging Promise was canceled. This happens when the worker runtime is waiting for a Promise from JavaScript to resolve, but has detected that the Promise cannot possibly ever resolve because all code and events related to the Promise\'s I/O context have already finished. \xe2\x9c\x98 [ERROR] Uncaught (in response) Error: The script will never generate a response.
我的代码很简单
\nimport { Client } from \'@neondatabase/serverless\'\nimport { Env } from \'./models\'\n\nexport default {\n async fetch(request: Request, …
Run Code Online (Sandbox Code Playgroud) 如果您在免费计划中看到 Cloudflare Workers 的定价部分,他们有以下内容
每个请求最多 10ms CPU 时间
并在以下付费计划中
每个请求最多 30 秒的挂机时间
通常,执行一个执行有用操作的脚本需要超过 10 毫秒的时间。根据任务的不同,甚至 30 秒的墙上时间也可能很短。
如果您查看 Worker 的文档限制:CPU 运行时部分,它有
大多数 Worker 请求消耗的时间不到一毫秒。很少能找到正常运行的 Workers 脚本超出 CPU 时间限制的情况。免费计划中的工作人员最多可消耗 10 毫秒,付费计划中的捆绑工作人员最多可消耗 50 毫秒。付费计划还提供长达 30 秒的持续时间,以增加计算时间。免费计划的 10 毫秒津贴足以满足大多数用例(包括应用程序托管)的执行时间。
Workers 脚本的实际运行时间没有限制。只要发送请求的客户端保持连接,Workers 脚本就可以继续处理、发出子请求并代表该请求设置超时。当客户端断开连接时,与该客户端请求关联的所有任务都将被取消。您可以使用 event.waitUntil() 将取消再延迟 30 秒,或者直到传递给 waitUntil() 的 Promise 完成。
虽然就 CPU 时间的一般意义而言,本文中提到的 Wall time是正确的。我不认为这在这种情况下是准确的含义,因为在链接的帖子中,CPU 时间是内核或用户空间中的代码执行时间。
CPU time per request
与 AWS Lambda 中的代码执行 CPU 时间也不相似,因为它提到了以下内容
Workers 脚本的实际运行时间没有限制。
因此脚本的实际运行时间(即:CPU 执行时间)并不像 AWS Lambda 中那样限制为 15 分钟。
然后
我不太熟悉缓冲区及其工作原理。
在节点我可以做
const str = "dasjkiodjsiodjpasiodfjodifjaspiofjsdioajfpasodfjsdioa";
let buff = Buffer.from(str); // <Buffer 64 61 73 6a 6b 6 etc...
let buffHex = Buffer.from(str, 'hex');
console.log(buff)
Run Code Online (Sandbox Code Playgroud)
我将如何在 Cloudflare Workers 中执行此操作,因为我得到ReferenceError: Buffer is not defined
我有一个简单的 NodeJS 应用程序(Cloudflare Worker)。
在主打字稿文件 ( index.ts
) 中,我导入处理程序模块,该模块的第一行是:
const Monitor = import('ping-monitor')
ping-monitor
是 package.json 中的依赖项:
"dependencies": {
"ping-monitor": "^0.6.2"
}
Run Code Online (Sandbox Code Playgroud)
现在,当我在 dist 中运行parcel build src/index.ts
输出时,有:
var $1ZQrD$pingmonitor = require("ping-monitor");
所以内容ping-monitor
没有正确捆绑。当我尝试通过wrangler dev
(输出是dist/worker.js
)在本地运行它时,它会抱怨:Uncaught ReferenceError: require is not defined
。
我如何告诉 ParcelJSping-monitor
在输出中进行捆绑?
我正在尝试使用 cloudflare 工作人员来执行经过身份验证的操作。
我使用 firebase 进行身份验证,并可以访问通过的访问令牌,但由于 firebase-admin 使用 nodejs 模块,它无法在平台上工作,因此我只能手动验证令牌。
我一直在尝试使用 Crypto API 进行身份验证,并最终让它导入公钥签署令牌以检查其是否有效,但我一直收到 FALSE。我正在努力弄清楚为什么它总是返回 false 的有效性。
我导入的加密密钥以“秘密”类型输入,我希望它是“公开”的。
任何想法或帮助都将是巨大的。在过去的几天里我一直用头撞桌子试图解决这个问题
这是我到目前为止所拥有的:
function _utf8ToUint8Array(str) {
return Base64URL.parse(btoa(unescape(encodeURIComponent(str))))
}
class Base64URL {
static parse(s) {
return new Uint8Array(Array.prototype.map.call(atob(s.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, '')), c => c.charCodeAt(0)))
}
static stringify(a) {
return btoa(String.fromCharCode.apply(0, a)).replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_')
}
}
export async function verify(userToken: string) {
let jwt = decodeJWT(userToken)
var jwKey = await fetchPublicKey(jwt.header.kid);
let publicKey = await importPublicKey(jwKey);
var isValid = await verifyPublicKey(publicKey, userToken);
console.log('isValid', …
Run Code Online (Sandbox Code Playgroud) javascript jwt firebase firebase-authentication cloudflare-workers
我正在尝试使用 mongodb 查询 mongodb simple findOne。Cloudflare 工作人员提供 10 毫秒的 CPU 时间,但在预览/发布期间抛出错误
我试过安装这些 npm 模块
npm i mongodb, mongodb-core, dgram, fs
Run Code Online (Sandbox Code Playgroud)
var MongoClient = require('mongodb').MongoClient;
try{
var db = await MongoClient.connect('mongodb+srv://mongoURL',{ useNewUrlParser: true,useUnifiedTopology: true });
var dbo = db.db("test");
var result = await dbo.collection("testcollection").findOne()
const init = {
status: 200,
headers: { "Access-Control-Allow-Origin": "*", 'content-type': 'application/json' },
}
return new Response(JSON.stringify(result), init)
} catch(e) { console.log(e); return new Response(JSON.stringify(result), init) }
Run Code Online (Sandbox Code Playgroud)
抛出的错误在这里 - https://pastebin.com/xMKKjdZF
我必须在 Cloudflare 工作器中使用HTMLRewriter访问嵌套元素。
例子
<div data-code="ABC">
<div class="title">Title</div>
<div class="price">9,99</div>
</div>
<div data-code="XYZ">
<div class="title">Title</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用多个 .on() 但订单没有保留,因为缺少一些 .price 并且我无法正确合并 codeHandler 和 PriceHandler 的结果
await new HTMLRewriter().on("[data-code]", codeHandler)
.on(".price", priceHandler)
.transform(response).arrayBuffer()
Run Code Online (Sandbox Code Playgroud)
我正在考虑多次迭代 new HTMLRewriter() 但可读流被锁定。
当前代码
工人
class codeHandler {
constructor() {
this.values = []
}
element(element) {
let data = {
code: element.getAttribute("data-code"),
title: element.querySelector(".title").innerText, <--
price: element.querySelector(".price").innerText, <--- HERE
}
this.values.push( data )
}
}
const url = "https://www.example.com"
async function handleRequest() {
const response …
Run Code Online (Sandbox Code Playgroud) javascript ×5
cloudflare ×3
buffer ×1
firebase ×1
jwt ×1
mongodb ×1
node.js ×1
parceljs ×1
postgresql ×1
typescript ×1
vue.js ×1
webpack-2 ×1