Todos los productos
Search
Centro de documentos

Function Compute:Handler

Última actualización: Sep 06, 2026

Un handler de Node.js le permite responder a eventos y ejecutar su lógica de negocio. Este tema describe el concepto y la estructura de los handlers de Node.js, además de proporcionar ejemplos.

¿Qué es un handler?

El handler de una función de FC es el método dentro del código de su función que procesa las solicitudes. Cuando se invoca su función de FC, Function Compute ejecuta el handler configurado para procesar la solicitud. Configure el handler en la consola de Function Compute mediante el parámetro Handler.

En una función de FC con Node.js, el formato del handler es filename.methodName. Por ejemplo, si su archivo se llama index.js o index.mjs y el método se llama handler, el handler será index.handler.

Para obtener más información sobre las funciones de FC y sus operaciones relacionadas, consulte Create an event-triggered function.

La configuración de los handlers debe cumplir con las especificaciones de configuración de Function Compute. Estas especificaciones varían según el tipo de handler.

Firma del handler

Nota

Function Compute admite módulos ECMAScript (ES) a partir del runtime de Node.js 18. En versiones anteriores (Node.js 16 y previas), Function Compute solo admitía módulos CommonJS. Para obtener más información, consulte Specify a handler as an ES module.

Un handler de eventos simple tiene la siguiente firma:

Node.js 18 o Node.js 20

Módulo ES

Nota

Este código de ejemplo admite el despliegue con un solo clic. Despliegue el código directamente en Function Compute (FC).start-fc3-nodejs-es

// index.mjs
export const handler = async (event, context) => {
  console.log("receive event: \n" + event);
  return "Hello World!";
};

Módulo CommonJS

// index.js
exports.handler = async function(event, context) {
  console.log("receive event: \n" + event);
  return "Hello World!";
};

Node.js 16 y versiones anteriores

// index.js
exports.handler = async function(event, context, callback) {
  console.log("event: \n" + event);
  callback(null, 'hello world');
};

A continuación se describe el código de ejemplo anterior:

handler es el nombre del método, el cual corresponde al Handler configurado en la consola de Function Compute. Por ejemplo, si especifica index.handler como Handler al crear una función, Function Compute carga la función handler definida en index.js e inicia la ejecución.

El runtime de Function Compute pasa los parámetros de solicitud al handler de solicitudes. El primer parámetro es el objeto event, que contiene la carga útil de la solicitud. El objeto event es de tipo Buffer y usted puede convertirlo al tipo de objeto que necesite. El segundo parámetro es el objeto context, que proporciona información de contexto del runtime para la invocación. Para obtener más información, consulte Context.

    Nota
    • Cuando utilice el runtime de Node.js 18 o posterior, use la función Async/Await en lugar de callback.

    • Function Compute convierte el resultado devuelto según su tipo.

      • Tipo Buffer: se devuelve tal cual.

      • Tipo Object: se convierte al formato JSON y se devuelve.

      • Otros tipos: se convierten a una cadena y se devuelven.

Async/Await

Si utiliza el entorno de runtime de Node.js 18 o posterior, se recomienda usar el enfoque Async/Await. Este enfoque ofrece una forma concisa y legible de escribir código asíncrono en Node.js, ya que evita callbacks anidados o llamadas encadenadas.

Importante

Si utiliza el runtime de Node.js 16 o anterior, debe usar explícitamente el método callback para enviar una respuesta. De lo contrario, la solicitud agotará el tiempo de espera.

El enfoque Async/Await presenta las siguientes ventajas frente a las funciones callback callback:

  • Mayor legibilidad: el código que usa async/await es más lineal y síncrono. Esto facilita su comprensión y mantenimiento, ya que evita callbacks profundamente anidados y genera una estructura de código más clara.

  • Depuración y manejo de errores más sencillos: los bloques try-catch permiten capturar y gestionar errores en operaciones asíncronas con mayor facilidad. La pila de errores resulta más clara, lo que le permite rastrear el origen de un error con mayor precisión.

  • Mayor eficiencia: los callbacks suelen requerir cambios entre distintas partes del código. El enfoque async/await reduce la cantidad de cambios de contexto, lo que mejora la eficiencia del código.

Ejemplo 1: analizar sintácticamente parámetros con formato JSON

Código de ejemplo

Function Compute pasa los parámetros con formato JSON directamente a su función. Usted debe analizar sintácticamente estos parámetros en su código. A continuación se muestra cómo analizar sintácticamente un evento con formato JSON.

Módulo ES

Nota

Este ejemplo solo es compatible con runtimes de Node.js 18 y posteriores.

export const handler = async (event, context) => {
  var eventObj = JSON.parse(event.toString());
  return eventObj['key'];
};

Módulo CommonJS

Nota

Este código de ejemplo admite el despliegue con un solo clic. Despliegue este código en Function Compute (FC) con un solo clic.start-fc3-nodejs-json

exports.handler = function(event, context, callback) {
  var eventObj = JSON.parse(event.toString());
  callback(null, eventObj['key']);
};

Requisitos previos

Cree una función de Node.js. Para obtener más información, consulte Create an event-triggered function. Si desea especificar su código como un módulo ES, seleccione Node.js 18 o Node.js 20 como runtime al crear la función.

Procedimiento

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Function Management > Functions.

  2. En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.

  3. En la página de configuración de la función, seleccione la pestaña Code. En el editor de código, introduzca el código de ejemplo anterior y luego haga clic en Deploy.

    Nota

    El handler de la función en el código de ejemplo anterior es el método handler en index.js. Si el handler de su función está configurado de otra manera, actualice el archivo y el método correspondientes.

  4. En la pestaña Code, haga clic en el ícono image.png situado a la derecha de Test Function. En la lista desplegable, seleccione Configure Test Parameters. Introduzca a continuación los parámetros de prueba de ejemplo y luego haga clic en OK.

    {
      "key": "value"
    }
  5. Haga clic en Test Function.

    Una vez que la función se ejecute correctamente, compruebe la respuesta. La respuesta será value.

Ejemplo 2: leer y escribir recursos de OSS de forma segura con un par de AccessKey temporal

Código de ejemplo

Utilice el par de AccessKey temporal que proporciona Function Compute para acceder a Object Storage Service (OSS). A continuación se muestra un ejemplo de código.

Módulo ES

Nota

Este ejemplo solo se ejecuta en runtimes de Node.js 18 o posteriores.

// index.mjs
import OSSClient from 'ali-oss';

export const handler = async (event, context) => {
    console.log(event.toString());

    var ossClient = new OSSClient({
        accessKeyId: context.credentials.accessKeyId,
        accessKeySecret: context.credentials.accessKeySecret,
        stsToken: context.credentials.securityToken,
        region: 'oss-cn-shenzhen',
        bucket: 'my-bucket',
    });

    try {
      const uploadResult = await ossClient.put('myObj', Buffer.from('hello, fc', "utf-8"));
      console.log('upload success, ', uploadResult);
      return "put object"
    } catch (error) {
      throw error
    }
};

Descripción del código:

  • context.credentials: obtiene el par de AccessKey temporal del parámetro context. Esto evita codificar de forma rígida información confidencial, como contraseñas, dentro del código.

  • myObj: el nombre del objeto de OSS.

  • Buffer.from('hello, fc', "utf-8"): el contenido del objeto que se va a cargar.

  • return "put object": si la carga se completa correctamente, se devuelve put object.

  • throw err: si la carga falla, se lanza una excepción.

Módulo CommonJS

Nota

Este código de ejemplo admite el despliegue con un solo clic. Despliegue este código en Function Compute (FC) con un solo clic.start-fc3-nodejs-oss

var OSSClient = require('ali-oss');

exports.handler = function (event, context, callback) {
    console.log(event.toString());

    var ossClient = new OSSClient({
        accessKeyId: context.credentials.accessKeyId,
        accessKeySecret: context.credentials.accessKeySecret,
        stsToken: context.credentials.securityToken,
        region: `oss-${context.region}`,
    		bucket: process.env.BUCKET_NAME,
    });

    ossClient.put('myObj', Buffer.from('hello, fc', "utf-8")).then(function (res) {
        callback(null, 'put object');
    }).catch(function (err) {
        callback(err);
    });  
};

Descripción del código:

  • context.credentials: obtiene el par de AccessKey temporal del parámetro context. Esto evita codificar de forma rígida información confidencial, como contraseñas, dentro del código.

  • myObj: el nombre del objeto de OSS.

  • Buffer.from('hello, fc', "utf-8"): el contenido del objeto que se va a cargar.

  • callback(null, 'put object'): si la carga se completa correctamente, se devuelve put object.

  • callback(err): si la carga falla, se devuelve err.

Requisitos previos

Procedimiento

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Function Management > Functions.

  2. En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.

  3. (Opcional) En la pestaña Function Details de la función, haga clic en la pestaña Code. En la sección WebIDE, elija para abrir una terminal. Luego, ejecute el siguiente comando para instalar la dependencia ali-oss.

    npm install ali-oss --save

    Una vez finalizada la instalación, se generará la carpeta node_modules en el directorio de código, ubicado en el lado izquierdo de WebIDE. Esta carpeta contiene el directorio ali-oss y otras bibliotecas de dependencias.

  4. En la pestaña Function Details de la función, haga clic en la pestaña Code. En el editor de código, introduzca el sample code proporcionado anteriormente. Después, guarde el código y haga clic en Deploy.

    Nota
    • En el código de ejemplo, el handler de la función es el método handler del archivo index.js o index.mjs. Si su función utiliza un handler distinto, actualice el archivo y el método correspondientes.

    • En el código de ejemplo, debe configurar region y bucket según sus necesidades.

  5. Haga clic en Test Function.

    Una vez ejecutada la función, consulte el resultado devuelto. El resultado será put object.

Ejemplo 3: llamar a un comando externo

Un programa de Node.js también puede crear un proceso fork para llamar a comandos externos. Por ejemplo, utilice el módulo child_process para llamar al comando de Linux ls -l y listar los archivos del directorio actual. A continuación se muestra un ejemplo de código.

Módulo ES

Nota

Este ejemplo solo se ejecuta en runtimes de Node.js 18 y posteriores.

'use strict';

import { exec } from 'child_process';
import { promisify } from 'util';

const execPromisify = promisify(exec);
export const handler = async (event, context) => {
  try {
    const { stdout, stderr } = await execPromisify("ls -l");
    console.log(`stdout: ${stdout}`);
    if (stderr !== "") {
      console.error(`stderr: ${stderr}`);
    }
    return stdout;
  } catch (error) {
    console.error(`exec error: ${error}`);
    return error;
  }
}

Módulo CommonJS

Nota

Este código admite el despliegue con un solo clic. Despliegue este código en Function Compute (FC) con un solo clic.start-fc3-nodejs-exec

'use strict';

var exec = require('child_process').exec;
exports.handler = (event, context, callback) => {
  console.log('start to execute a command');
  exec("ls -l", function(error, stdout, stderr){
    callback(null, stdout);
});
}

Ejemplo 4: llamar a una función mediante un HTTP trigger

Código de ejemplo

Utilice la URL proporcionada por el HTTP trigger para llamar a la función. A continuación se muestra un ejemplo de código.

  • Si el Authentication Method del HTTP trigger está establecido en No Authentication, utilice Postman o un comando curl para llamar a la función. Para obtener más información, consulte Procedure.

  • Si el Authentication Method del HTTP trigger está establecido en Signature Authentication o en JWT authentication or Bearer authentication, utilice el método de autenticación correspondiente para llamar a la función. Para obtener más información, consulte Authentication.

Para obtener información sobre los formatos de carga útil de solicitud y respuesta en las llamadas realizadas por HTTP triggers, consulte Call a function using an HTTP trigger.

Módulo ES

Nota

Este ejemplo solo es compatible con runtimes de Node.js 18 o posteriores.

'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
  };
}

Módulo CommonJS

Nota

Este código de ejemplo admite el despliegue con un solo clic. Despliegue este código en Function Compute (FC) con un solo clic.start-fc3-nodejs-http

'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
  });
}

Requisitos previos

Se creó una función que utiliza el runtime de Node.js y un HTTP trigger, siguiendo los ejemplos anteriores. Para obtener más información, consulte Create an event-triggered function y Configure an HTTP trigger. Si desea especificar el código como un módulo ES, seleccione Node.js 18 o Node.js 20 como runtime al crear la función.

Procedimiento

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Function Management > Functions.

  2. En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.

  3. En la página de detalles de la función, haga clic en la pestaña Triggers. En la página Triggers, obtenga el endpoint público del HTTP trigger.

  4. Ejecute el siguiente comando en una herramienta curl para llamar a la función.

    curl -i "https://test-nodejs-dlgxxr****.cn-shanghai.fcapp.run" -d 'Hello World!'

    En el comando anterior, https://test-nodejs-dlgxxr****.cn-shanghai.fcapp.run es el endpoint público del HTTP trigger.

    Se devuelve la siguiente respuesta.

    HTTP/1.1 200 OK
    Access-Control-Expose-Headers: Date,x-fc-request-id
    Content-Disposition: attachment
    Content-Length: 12
    Content-Type: text/html; charset=utf-8
    Etag: W/"c-Lve95gjOVATpfV8EL5X4nxwjKHE"
    X-Fc-Request-Id: 1-65d866a8-15d8796a-cb9b4feb69ca
    X-Powered-By: Express
    Date: Fri, 23 Feb 2024 09:34:34 GMT
    
    Hello World!

Ejemplo 5: usar un HTTP trigger para descargar un archivo

Código de ejemplo

Para devolver una imagen, un paquete comprimido o un archivo binario desde su código, utilice un HTTP trigger. A continuación se muestra un ejemplo de código.

Módulo ES

Nota

Este ejemplo solo es compatible con runtimes de Node.js 18 o posteriores.

// index.mjs
'use strict';

import mime from 'mime';
import fs from 'fs/promises';
import path from 'path'; 

export const handler = async (event, context) => {
    const fileContent = 'This is a sample text file created in the code.';
    const fileName = 'sample.txt';
    const filePath = path.join('/tmp', fileName);
    
    try {
        await fs.writeFile(filePath, fileContent);
        
        const mimeType = mime.getType(filePath);
        if (!mimeType) {
            throw new Error('Unable to determine MIME type');
        }
        
        const fileData = await fs.readFile(filePath);
        const fileBase64 = Buffer.from(fileData).toString('base64');
        
        const fcResponse = {
            'statusCode': 200,
            'headers': {
                'Content-Type': mimeType,
                'Content-Disposition': `attachment; filename="${fileName}"`,
            },
            'body': fileBase64,
            'isBase64Encoded': true
        };
        
        console.log('File generated and fetched successfully.');
        return fcResponse;
    } catch (err) {
        console.error(err);
        return {
            'statusCode': 500,
            'body': err.message
        };
    }
};

Módulo CommonJS

// index.js
'use strict';
const mime = require('mime');
const fs = require('fs');
const path = require('path');

exports.handler = async (event, context, callback) => {

    const fileContent = 'This is a sample text file created in the code.';
    const fileName = 'sample.txt';
    const filePath = path.join('/tmp', fileName);
    try {
        fs.writeFileSync(filePath, fileContent);

        const mimeType = mime.getType(filePath);
        if (!mimeType) {
            throw new Error('Unable to determine MIME type');
        }

        const fileData = fs.readFileSync(filePath);
        const fileBase64 = Buffer.from(fileData).toString('base64');

        const fcResponse = {
            'statusCode': 200,
            'headers': {
                'Content-Type': mimeType,
                'Content-Disposition': `attachment; filename="${fileName}"`,
            },
            'body': fileBase64,
            'isBase64Encoded': true
        };

        console.log('File generated and fetched successfully.');
        callback(null, fcResponse);
    } catch (err) {
        console.error(err);
        callback(null, {
            'statusCode': 500,
            'body': err.message
        });
    }
};

Requisitos previos

Cree una función que utilice el runtime de Node.js y un HTTP trigger, siguiendo los ejemplos anteriores. Para obtener más información, consulte Create an event-triggered function y Configure an HTTP trigger. Si desea especificar el código como un módulo ES, establezca el runtime en Node.js 18 o Node.js 20 al crear la función.

Procedimiento

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Function Management > Functions.

  2. En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.

  3. En la página de detalles de la función, haga clic en la pestaña Code y luego elija para abrir una ventana de terminal. Ejecute el comando npm install mime@2 para instalar la biblioteca mime. Una vez finalizada la instalación, haga clic en Deploy.

  4. En la pestaña Trigger de la función, obtenga el Internet Endpoint del HTTP trigger. Copie la URL en su navegador y presione Entrar.

    Al presionar Entrar, se activa la función. Si la función se ejecuta correctamente, el archivo se descargará en su computadora local.