11.3.3. 关于调用 Node.js 功能
当使用 Knative (kn
) CLI 创建功能项目时,您可以生成一个响应 CloudEvents 的项目,或者响应简单 HTTP 请求的项目。Knative 中的 CloudEvents 作为 POST 请求通过 HTTP 传输,因此两种功能类型都侦听并响应传入的 HTTP 事件。
Node.js 功能可以通过简单的 HTTP 请求调用。收到传入请求后,将通过 上下文
对象作为第一个参数来调用函数。
11.3.3.1. Node.js 上下文对象
通过提供 上下文
对象作为第一个参数来调用函数。此对象提供对传入 HTTP 请求信息的访问。
上下文对象示例
function handle(context, data)
此信息包括 HTTP 请求方法、通过请求发送的任何查询字符串或标头、HTTP 版本和请求正文。传入包含 CloudEvent 的请求将进入 CloudEvent
实例附加到上下文对象,以便使用 context.cloudevent
访问它。
11.3.3.1.1. 上下文对象方法
上下文(context)
对象具有单一方法 cloudEventResponse()
,它接受数据值并返回 CloudEvent。
在 Knative 系统中,如果发送 CloudEvent 的事件代理调用将部署为服务的功能,代理会检查响应。如果响应是 CloudEvent,则此事件由代理处理。
上下文对象方法示例
// Expects to receive a CloudEvent with customer data function handle(context, customer) { // process the customer const processed = handle(customer); return context.cloudEventResponse(customer) .source('/handle') .type('fn.process.customer') .response(); }
11.3.3.1.2. CloudEvent 数据
如果传入的请求为 CloudEvent,则从事件中提取与 CloudEvent 相关的任何数据,并作为第二个参数提供。例如,如果收到在它的数据属性中包含类似如下的 JSON 字符串的 CloudEvent:
{ "customerId": "0123456", "productId": "6543210" }
在调用时。函数的第二个参数(在上下文
对象后),将是带有 customerId
和 productId
属性的 JavaScript 对象。
签名示例
function handle(context, data)
本例中 data
参数是一个 JavaScript 对象,其中包含 customerId
和 productId
属性。