本文介绍如何使用Node.js请求处理程序响应接收到的事件并执行相应的业务逻辑。
请求处理程序
请求处理程序是您提供的一个方法。当您的函数被调用时,函数计算会运行该方法处理请求。
您可以通过函数计算控制台页面配置请求处理程序,对于Node.js语言的函数,请求处理程序需配置为 [文件名].[方法名]
。例如,您的文件名为index.js或index.mjs,方法名为handler,则请求处理程序可配置为 index.handler
。
ES模块和CommonJS模块的事件请求处理程序的方法签名分别定义如下:
ES模块
// index.mjs
export const handler = async (event, context) => {
console.log("receive event: \n" + event);
return "Hello World!";
};
CommonJS模块
// index.js
exports.handler = async function(event, context) {
console.log("receive event: \n" + event);
return "Hello World!";
};
- 方法名
您可以自定义方法名称,或与函数计算控制台配置的请求处理程序相对应。如:handler。 - event入参
您调用函数时传入的参数。 - context入参
context参数中包含一些函数的运行时信息。
示例:JSON格式参数解析
如下示例中,我们解析函数调用入参event为JSON,然后获取userName字段的值:
ES模块
export const handler = async (event, context) => {
var eventObj = JSON.parse(event.toString());
return eventObj['key'];
};
CommonJS模块
exports.handler = function(event, context, callback) {
var eventObj = JSON.parse(event.toString());
callback(null, eventObj['key']);
};
示例:HTTP触发器 - 调用函数
如下示例中,我们处理传入的事件,如果是HTTP请求,则读取并解码请求体,然后原样返回给调用者:
ES模块
'use strict';
export const handler = async (event, context) => {
const eventObj = JSON.parse(event);
console.log(`receive event: ${JSON.stringify(eventObj)}`);
let body = 'Hello World!';
// get http request body
if ("body" in eventObj) {
body = eventObj.body;
if (eventObj.isBase64Encoded) {
body = Buffer.from(body, 'base64').toString('utf-8');
}
}
console.log(`receive http body: ${body}`);
return {
'statusCode': 200,
'body': body
};
}
CommonJS模块
'use strict';
exports.handler = (event, context, callback) => {
const eventObj = JSON.parse(event);
console.log(`receive event: ${JSON.stringify(eventObj)}`);
let body = 'Hello World!';
// get http request body
if ("body" in eventObj) {
body = eventObj.body;
if (eventObj.isBase64Encoded) {
body = Buffer.from(body, 'base64').toString('utf-8');
}
}
console.log(`receive http body: ${body}`);
callback(null, {
'statusCode': 200,
'body': body
});
}