如何在Code.fromInline传入的动态代码中访问someVar变量?
如何在EdgeFunction内联代码中访问外部变量
因为Code.fromInline()接收的是字符串形式的代码,这段代码会在Edge Function的独立运行环境中执行,和外部定义的someVar不在同一个上下文,所以无法直接引用。你可以通过以下几种方式解决:
1. 模板字符串插值(适用于非敏感数据)
直接通过模板字符串将外部变量的值注入到内联代码中:
const someVar = "some value"; const rewriteFunction = new cf.experimental.EdgeFunction( this, "RewriteFunction", { runtime: Runtime.NODEJS_18_X, handler: "index.handler", code: Code.fromInline(` exports.handler = async (event) => { const request = event.Records[0].cf.request; // 注入外部变量的值 const injectedVar = "${someVar}"; console.log(injectedVar); // 输出 "some value" }; `), } );
如果someVar是对象、数组等复杂类型,需要先转成JSON字符串,再在内部解析:
const someVar = { key: "value", num: 123 }; const rewriteFunction = new cf.experimental.EdgeFunction( this, "RewriteFunction", { runtime: Runtime.NODEJS_18_X, handler: "index.handler", code: Code.fromInline(` exports.handler = async (event) => { const request = event.Records[0].cf.request; const injectedVar = JSON.parse('${JSON.stringify(someVar)}'); console.log(injectedVar.key); // 输出 "value" }; `), } );
2. 使用环境变量(适用于敏感数据)
如果someVar包含敏感信息,建议通过Edge Function的环境变量配置传递,避免硬编码:
const someVar = "some sensitive value"; const rewriteFunction = new cf.experimental.EdgeFunction( this, "RewriteFunction", { runtime: Runtime.NODEJS_18_X, handler: "index.handler", code: Code.fromInline(` exports.handler = async (event) => { const request = event.Records[0].cf.request; // 从环境变量读取值 const injectedVar = process.env.SOME_VAR; console.log(injectedVar); }; `), // 配置环境变量 environment: { variables: { SOME_VAR: someVar } } } );
内容的提问来源于stack exchange,提问作者David Klempfner
相关产品推荐
相关产品推荐

