标签: cloudflare-workers

Cloudflare Workers - 使用 Vuejs 的 SPA

您好,我已使用以下命令将我的 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 vue.js cloudflare-workers

13
推荐指数
2
解决办法
3155
查看次数

地方发展有秘密

我按照本指南通过 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-workers

11
推荐指数
1
解决办法
3626
查看次数

如何在本地开发环境中使用CloudFlare Worker中的环境变量

我有一个 CloudFlare Worker,在 CF 设置..环境变量界面中设置了环境变量。我也有这个 wrangler.toml

我的牧马人.toml

在我的工作人员的 index.js 中,我有读取变量 REGISTRATION_API_URL 的代码。如果代码在已部署的环境中运行,那么它会将 CF 设置中的值注入 REGISTRATION_API_URL 中。

但如果我运行 wrangler devwrangler dev --env local 则 REGISTRATION_API_URL 未定义。

最初我预计该变量将由 CF 设置值填充,但事实并非如此。所以我尝试了这里显示的 wrangler.toml 中的两个变量设置,但没有区别。我花了很多时间搜索文档和更大的网络。

本地开发环境是否支持环境变量?人们想出了任何解决方法吗?目前我正在寻找未定义的变量并使用硬编码值定义变量,但这不是一个很好的答案。

使用牧马人1.16.0

谢谢。

environment-variables cloudflare-workers

9
推荐指数
2
解决办法
5421
查看次数

cloudflare 工作人员中的错误:未捕获(响应中)错误:脚本永远不会生成响应

您好,我在 Cloudflare 工作人员中收到以下错误

\n

A 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.

\n

我的代码很简单

\n
import { Client } from \'@neondatabase/serverless\'\nimport { Env } from \'./models\'\n\nexport default {\n    async fetch(request: Request, …
Run Code Online (Sandbox Code Playgroud)

javascript postgresql cloudflare-workers

8
推荐指数
0
解决办法
984
查看次数

Cloudflare Worker 请求上下文中的 CPU 时间和 Wall time 是多少?

如果您在免费计划中看到 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 分钟。

然后

  • Cloudflare 工作线程中每个请求 …

cloudflare cloudflare-workers

7
推荐指数
1
解决办法
4194
查看次数

Cloudflare Workers Buffer.from()

我不太熟悉缓冲区及其工作原理。

在节点我可以做

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

javascript buffer cloudflare-workers

7
推荐指数
1
解决办法
4087
查看次数

ParcelJS 不捆绑导入的 js 库

我有一个简单的 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在输出中进行捆绑?

javascript node.js typescript parceljs cloudflare-workers

7
推荐指数
1
解决办法
3070
查看次数

手动验证 Firebase 身份验证令牌

我正在尝试使用 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

7
推荐指数
2
解决办法
1771
查看次数

如何使用 Cloudflare 工作人员在 MongoDB 中进行查询?

我正在尝试使用 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

mongodb webpack-2 cloudflare-workers cloudflare-apps

6
推荐指数
1
解决办法
2079
查看次数

访问 HTMLRewriter 中的嵌套元素 - Cloudflare Workers

我必须在 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 cloudflare cloudflare-workers

6
推荐指数
1
解决办法
227
查看次数