Cloudflare Workers Buffer.from()

问题描述 投票:0回答:4

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

在节点我可以做

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)

我将如何在 Cloudflare Workers 中执行此操作,因为我得到

ReferenceError: Buffer is not defined

javascript buffer cloudflare-workers
4个回答
10
投票

Buffer
是一个节点 API。 Cloudflare Workers 基于 Web 平台 API,就像您在浏览器中找到的那样。
Buffer
的网络平台替代方案是
Uint8Array
。您可以使用
TextEncoder
TextDecoder
API 在 UTF-8 编码的
Uint8Array
和文本字符串之间进行转换。

let bytes = new TextEncoder().encode(str);

要将

Uint8Array
转换为十六进制,您可以使用如下函数:

function bytes2hex(bytes) {
  return Array.prototype.map.call(bytes,
      byte => ('0' + byte.toString(16)).slice(-2)).join('');
}

我不建议为此使用

Buffer
polyfill,因为它会增加你的代码大小。最好直接使用
Uint8Array

一般来说,您应该能够在 Stack Overflow 上的

Uint8Array
上找到有关如何进行常见操作的答案。


2
投票

您可以将 Node.js 的 Buffer API 与 Cloudflare Workers 结合使用。

请参阅 https://developers.cloudflare.com/workers/runtime-apis/nodejs/,其中解释了通过将

compatibility_flags = [ "nodejs_compat" ]
添加到 wrangler.toml,您可以使用以下 Node.js API:

  • 断言
  • 异步本地存储
  • 缓冲区
  • 事件发射器
  • 实用程序

0
投票

以下示例展示了如何在 Cloudflare 工作线程中创建“hello world”的 SHA-256 哈希,仅使用全局可用的 WebCrypto 浏览器 API。希望它能让您了解其工作原理!

export default {
  async fetch(request)
  {
    const myText = new TextEncoder().encode('Hello world!');
    const myDigest = await crypto.subtle.digest({ name: 'SHA-256' }, myText);
    const hashArray = Array.from(new Uint8Array(myDigest));
    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
    return new Response(hashHex, {status: 200});
  }
}

更多信息:https://developers.cloudflare.com/workers/runtime-apis/web-crypto/


0
投票

Cloudflare
最近添加了 Node.js 兼容性 API。

如果您使用的是

SvelteKit
,请将您的适配器替换为我的 @chientrm/adapter-cloudflare

在您的代码中:

import { Buffer } from 'node:buffer';

现在您可以使用这个

Buffer
对象。示例:

const bytes = Buffer.from('<some-base64-string>', 'base64');
© www.soinside.com 2019 - 2024. All rights reserved.