@fnproject/fdk

中文文档
0.0.114发布于 2026/11/04Apache-2.0CommonJS构建来源已验证近 30 天下载 2.2万

Fn 函数开发工具箱

中文使用文档
文档目录6 节
  1. 创建节点函数
  2. 函数背景
  3. 同步函数响应
  4. 处理非 Json 输入和输出
  5. 使用 HTTP 头并设置 HTTP 状态代码
  6. Fn和Node.js 依赖关系

Fn 节点功能开发者 Kit.js

此函数开发者 Kit 使其易于向 Fn 部署节点. js 函数. 它目前支持使用JSON格式的默认(cold)和热功能.

创建节点函数

写入一个 Node.js 函数只是写一个处理器函数的问题 您通过 FDK 引用您的功能.

以创建节点函数开始 fn init 并安装 FDK :

fn init --runtime node nodefunc
cd nodefunc

这创造了一个简单的问候世界功能 func.js数字 :

const fdk=require('@fnproject/fdk');

fdk.handle(function(input){
  let name = 'World';
  if (input.name) {
    name = input.name;
  }
  return {'message': 'Hello ' + name}
})

处理器函数将发送到函数的字符串输入 并返回响应字符串。 使用FDK 你不必担心阅读 输入从标准输入和写入到标准输出以返回您的响应. FDK让你专注于你的功能逻辑而不是力学.

现在运行它!

fn deploy --local --app fdkdemo 
fn invoke fdkdemo nodefunc 

现在您有一个基本的运行中节点函数,您可以修改并添加您想要的.

echo -n '{"name": "Tom"}' | fn invoke fdkdemo nodefunc

你应该看看结果

{"message": "Hello Tom"}

函数背景

函数引用上下文细节通过可选函数参数提供. 要接收上下文对象,只需在您的处理器函数中添加第二个参数. 在以下例子中 callID 从上下文获得并列入 响应消息 :

const fdk=require('@fnproject/fdk');

fdk.handle(function(input, ctx){
  let name = 'World';
  if (input) {
    name = input;
  }
  return 'Hello ' + name + ' from Node call ' + ctx.callID + '!';
})

上下文载有关于请求的其他上下文信息,例如:

  • ctx.config : 包含函数配置变量(来自环境)的对象(只读)
  • ctx.headers : 包含事件输入头作为字符串列表(只读)的对象
  • ctx.deadline (单位:千美元) Date 显示函数调用何时必须处理的对象
  • ctx.callID : 当前呼叫的呼叫ID
  • ctx.fnID : 当前函数的函数 ID
  • ctx.memory : 分配给此函数的 MB 中 RM 数量
  • ctx.contentType : 收到的请求内容类型( 如果设定, 否则无效)
  • ctx.setResponseHeader(key,values...) : 设置一个或多个值的响应头
  • ctx.addResponseHeader(key,values...) : 将数值添加到现有的响应头
  • ctx.responseContentType 设置/读取函数的响应内容类型(读取/写入)
  • ctx.httpGateway 此函数的 HTTP 网关上下文( 如果设置) 见 HTTPGatewayContext 下级

同步函数响应

通过返回 Javascript 返回函数的同步响应 Promise 从函数机构:

const fdk=require('@fnproject/fdk');

fdk.handle(function(input, ctx){
  return new Promise((resolve,reject)=>{
     setTimeout(()=>resolve("Hello"),1000);
  });
})

您还可以使用 async编号 :await 要求公约发挥作用.

处理非 Json 输入和输出

默认情况下, FDK 会尝试将输入转换成 JSON 对象, 否则会回到它的字符串格式 .

同样,默认一个函数的输出会作为JSON对象处理并使用JSON.stringify进行转换.

要更改输入的处理, 您可以添加一个额外 options 参数改为 fdk.handle 指定输入处理策略:

function myfunction(input,ctx){}

fdk.handle(myfunction, {inputMode: 'string'})

有效的输入模式是:

  • json (默认)试图将输入解析为json或返回到原始(可能为二进制)字符串值
  • string 总是将输入视为字符串
  • buffer 将输入读入 a Buffer 对象并传递到您的函数

要更改默认函数的输出处理, 您应该使用响应装饰符来包装结果值 :

function myfunction(input,ctx){
   return fdk.rawResult("Some string")
}

fdk.handle(myfunction)

现有的装饰有:

  • rawResult({string|Buffer}) 将结果直接传递到响应 - 值可以是字符串或缓冲器 - 这将不编码字符串对象上的引用
  • streamResult({ReadableStream}) 管道内装 ReadableStream 输入输出 - 这允许从文件或 HTTP 回复中处理数据

使用 HTTP 头并设置 HTTP 状态代码

您可以使用 ctx.protocol.header(key),此返回匹配头头的第一个头值 key (条块化后)和 ctx.protocol.headers 返回包含所有信头的对象.

const fdk=require('@fnproject/fdk');

fdk.handle(function(input, ctx){
  
  let hctx = ctx.httpGateway
  console.log("Request URL" , hctx.requestURL)
  
  console.log("Authorization header:" , hctx.getHeader("Authorization"))
  console.log( hctx.headers) // prints e.g. { "Content-Type": ["application/json"],"Accept":["application/json","text/plain"] } 
})

外出信头和HTTP状态代码可以以类似方式被修改:

const fdk=require('@fnproject/fdk');

fdk.handle(function(input, ctx){
    let hctx = ctx.httpGateway

   hctx.setResponseHeader("Location","http://example.com")
   hctx.statusCode = 302
})

这个 HTTPGatewayContext 对象的接口与 Context 但只访问函数的 HTTP 头 :

  • hctx.requestURL : 获取网关接收到的函数的 http 请求 URL( 否设置)
  • hctx.method : 获取用于引用网关的 HTTP 请求方法
  • hctx.headers : 获取收到的请求的 HTTP 头( 只读)
  • hctx.statusCode : 设置 HTTP 的 HTTP 状态代码 打开 hctx.setResponseHeader(key,values..), (中文(简体) ), hctx.addResponseHeader(key,values) 设置/添加响应信头

Fn和Node.js 依赖关系

Fn 处理 Node.js 依赖性的方式如下:

  • 如果有的话 package.json 不存在 node_modules 目录, Fn 构建运行于 npm install 在构建过程中安装您的依赖关系.
  • 如果 node_modules fn 假设您自己提供了依赖性,但没有安装.

版本与发布记录

@fnproject/fdk 共发布 93 个版本,首次发布于 2018/02/16;过去 12 个月发布了 18 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.114latest2026/11/0412 天前
0.0.1132026/10/1630 天前
0.0.1122026/10/081 个月前
0.0.1112026/10/061 个月前
0.0.1082026/09/241 个月前
0.0.1062026/09/231 个月前

关于 @fnproject/fdk 的常见问题

@fnproject/fdk 是什么?

Fn 函数开发工具箱

如何安装 @fnproject/fdk?

在项目目录运行 npm install @fnproject/fdk,或使用 pnpm add / yarn add / bun add。

@fnproject/fdk 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/fnproject__fdk 是否存在。

@fnproject/fdk 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@fnproject/fdk 可以商用吗?

@fnproject/fdk 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@fnproject/fdk 的下载量有多少?

根据 npm 官方下载统计,@fnproject/fdk 在 2026/10/15 – 2026/11/13 这 30 天内被下载 22,316 次,日均约 744 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fnproject/fdk 还在维护吗?

最新版本 0.0.114 发布于 2026/11/04(12 天前);至今共发布 93 个版本,其中过去 12 个月发布了 18 个;首次发布于 2018/02/16。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。