This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.6.5. 开发 Node.js 功能
创建 Node.js 功能项目 后,您可以修改提供的模板文件,以将业务逻辑添加到您的功能中。这包括配置功能调用和返回的标头和状态代码。
6.5.1. 先决条件 复制链接链接已复制到粘贴板!
- 在开发功能前,您必须完成设置 OpenShift Serverless 功能的步骤。
6.5.2. Node.js 功能模板结构 复制链接链接已复制到粘贴板!
使用 Knative (kn
) CLI 创建 Node.js 功能时,项目目录类似于典型的 Node.js 项目。唯一的例外是额外的 func.yaml
文件,用于配置函数。
http
和 event
触发器功能具有相同的模板结构:
模板结构
- 1
func.yaml
配置文件用于决定镜像名称和 registry。- 2
- 您的项目必须包含可导出单一功能的
index.js
文件。 - 3
- 您不限于模板
package.json
文件中提供的依赖项。您可以添加其他依赖项,如在任何其他 Node.js 项目中一样。添加 npm 依赖项示例
npm install --save opossum
npm install --save opossum
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为部署构建项目时,这些依赖项将包含在创建的运行时容器镜像中。
- 4
- 集成和单元测试脚本作为功能模板的一部分提供。
6.5.3. 关于调用 Node.js 功能 复制链接链接已复制到粘贴板!
当使用 Knative (kn
) CLI 创建功能项目时,您可以生成一个响应 CloudEvents 的项目,或者响应简单 HTTP 请求的项目。Knative 中的 CloudEvents 作为 POST 请求通过 HTTP 传输,因此两种功能类型都侦听并响应传入的 HTTP 事件。
Node.js 功能可以通过简单的 HTTP 请求调用。收到传入请求后,将通过 上下文
对象作为第一个参数来调用函数。
6.5.3.1. Node.js 上下文对象 复制链接链接已复制到粘贴板!
通过提供 上下文
对象作为第一个参数来调用函数。此对象提供对传入 HTTP 请求信息的访问。
上下文对象示例
function handle(context, data)
function handle(context, data)
此信息包括 HTTP 请求方法、通过请求发送的任何查询字符串或标头、HTTP 版本和请求正文。传入包含 CloudEvent 的请求将进入 CloudEvent
实例附加到上下文对象,以便使用 context.cloudevent
访问它。
6.5.3.1.1. 上下文对象方法 复制链接链接已复制到粘贴板!
上下文(context)
对象具有单一方法 cloudEventResponse ()
,它接受数据值并返回 CloudEvent。
在 Knative 系统中,如果发送 CloudEvent 的事件代理调用将部署为服务的功能,代理会检查响应。如果响应是 CloudEvent,则此事件由代理处理。
上下文对象方法示例
6.5.3.1.2. CloudEvent 数据 复制链接链接已复制到粘贴板!
如果传入的请求为 CloudEvent,则从事件中提取与 CloudEvent 相关的任何数据,并作为第二个参数提供。例如,如果收到在它的数据属性中包含类似如下的 JSON 字符串的 CloudEvent:
{ "customerId": "0123456", "productId": "6543210" }
{
"customerId": "0123456",
"productId": "6543210"
}
在调用时。函数的第二个参数(在上下文
对象后),将是带有 customerId
和 productId
属性的 JavaScript 对象。
签名示例
function handle(context, data)
function handle(context, data)
本例中 data
参数是一个 JavaScript 对象,其中包含 customerId
和 productId
属性。
6.5.4. Node.js 功能返回值 复制链接链接已复制到粘贴板!
功能可以返回任何有效的 JavaScript 类型,或者没有返回值。当函数没有指定返回值且未指示失败时,调用者会收到 204 No Content
响应。
功能也可以返回 CloudEvent 或一个 Message
对象,以便将事件推送到 Knative Eventing 系统。在这种情况下,开发人员不需要了解或实施 CloudEvent 消息传递规范。使用响应提取并发送返回值中的标头和其他相关信息。
示例
6.5.4.1. 返回的标头 复制链接链接已复制到粘贴板!
您可以通过在 return
对象中添加 headers
属性来设置响应标头。这些标头会提取并发送至调用者。
响应标头示例
function handle(context, customer) { // process customer and return custom headers // the response will be '204 No content' return { headers: { customerid: customer.id } }; }
function handle(context, customer) {
// process customer and return custom headers
// the response will be '204 No content'
return { headers: { customerid: customer.id } };
}
6.5.4.2. 返回状态代码 复制链接链接已复制到粘贴板!
您可以通过在返回对象中添加 statusCode
属性来设置 return
到调用者的状态代码:
状态代码示例
也可以为函数创建和丢弃的错误设置状态代码:
错误状态代码示例
6.5.5. 测试 Node.js 功能 复制链接链接已复制到粘贴板!
Node.js 功能可以在您的计算机上本地测试。在使用 kn func create
创建功能时创建的默认项目中,有一个 test 文件夹,其中包含一些简单的单元和集成测试。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Serving。
-
已安装 Knative (
kn
) CLI。 -
已使用
kn func create
创建功能。
流程
- 导航到您的功能的 test 文件夹。
运行测试:
npm test
$ npm test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5.6. 后续步骤 复制链接链接已复制到粘贴板!
- 请参阅 Node.js 上下文对象参考文档。
- 构建和部署功能.