Todos os produtos
Search
Central de documentação

Function Compute:Handler

Última atualização: Jun 29, 2026

Use um handler Node.js para responder a eventos e executar sua lógica de negócios. Este tópico descreve o conceito e a estrutura dos handlers Node.js e fornece exemplos.

O que é um handler?

O handler de uma função do FC é o método no código da função que processa requisições. Quando você invoca sua função FC, o Function Compute executa o handler configurado para processar a requisição. Configure o handler no console do Function Compute usando o parâmetro Handler.

Para uma função FC em Node.js, o formato do handler é filename.methodName. Por exemplo, se o arquivo for nomeado index.js ou index.mjs e o método for nomeado handler, o handler será index.handler.

Para obter mais informações sobre funções do FC e operações relacionadas, consulte Criar uma função acionada por evento.

As configurações de handler devem obedecer às especificações de configuração do Function Compute. Essas especificações variam conforme o tipo de handler.

Assinatura do handler

Nota

O Function Compute oferece suporte a módulos ECMAScript (ES) a partir do runtime Node.js 18. Antes disso (no Node.js 16 e versões anteriores), o Function Compute suportava apenas módulos CommonJS. Para mais informações, consulte Especificar um handler como módulo ES.

Um handler de evento simples tem a seguinte assinatura:

Node.js 18 ou Node.js 20

Módulo ES

Nota

Este código de exemplo suporta implantação com um clique. Implante o código diretamente no 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 e anteriores

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

O código de exemplo acima funciona da seguinte forma:

handler é o nome do método, correspondente ao Handler configurado no console do Function Compute. Por exemplo, se você definir index.handler como o Handler ao criar uma função, o Function Compute carrega a função handler definida em index.js e inicia a execução.

O runtime do Function Compute passa os parâmetros da requisição para o handler de requisição. O primeiro parâmetro é o objeto event, que contém o payload da requisição. O objeto event é do tipo Buffer; converta-o para o tipo de objeto necessário. O segundo parâmetro é o objeto context, que fornece informações de contexto do runtime para a invocação. Para mais informações, consulte Contexto.

    Nota
    • Ao usar o runtime Node.js 18 ou posterior, use o recurso Async/Await em vez de callback.

    • O Function Compute converte o resultado retornado com base no seu tipo.

      • Tipo Buffer: retornado sem alterações.

      • Tipo Object: convertido para o formato JSON e retornado.

      • Outros tipos: convertidos para string e retornados.

Async/Await

Ao usar o ambiente de runtime Node.js 18 ou posterior, recomendamos a abordagem Async/Await. Essa técnica permite escrever código assíncrono em Node.js de forma concisa e legível, evitando callbacks aninhados ou chamadas encadeadas.

Importante

Se você usar o runtime Node.js 16 ou anterior, deverá usar explicitamente o método callback para enviar uma resposta. Caso contrário, a requisição atingirá o tempo limite.

A abordagem Async/Await oferece as seguintes vantagens em comparação às funções de callback callback:

  • Maior legibilidade: o código com async/await segue um fluxo mais linear e síncrono, facilitando o entendimento e a manutenção. Isso evita callbacks profundamente aninhados, resultando em uma estrutura de código mais clara.

  • Depuração e tratamento de erros simplificados: blocos try-catch capturam e tratam erros em operações assíncronas com mais facilidade. A pilha de erros torna-se mais clara, permitindo rastrear a origem do erro com maior precisão.

  • Eficiência aprimorada: callbacks frequentemente exigem alternância entre diferentes partes do código. A abordagem async/await reduz o número de trocas de contexto, melhorando a eficiência do código.

Exemplo 1: Analisar parâmetros formatados em JSON

Código de exemplo

O Function Compute passa parâmetros formatados em JSON diretamente para sua função. Analise esses parâmetros no seu código. O código a seguir mostra como analisar um evento formatado em JSON.

Módulo ES

Nota

Este exemplo é compatível apenas com runtimes Node.js 18 e posteriores.

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

Módulo CommonJS

Nota

Este código de exemplo suporta implantação com um clique. Implante este código no Function Compute (FC) com um único clique.start-fc3-nodejs-json

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

Pré-requisitos

Crie uma função Node.js. Para mais informações, consulte Criar uma função acionada por evento. Se desejar especificar seu código como um módulo ES, selecione Node.js 18 ou Node.js 20 como runtime durante a criação da função.

Procedimento

  1. Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Function Management > Functions.

  2. Na barra de navegação superior, selecione uma região. Na página Functions, clique na função de destino.

  3. Na página de configuração da função, selecione a aba Code. No editor de código, insira o código de exemplo anterior e clique em Deploy.

    Nota

    No código de exemplo acima, o handler da função corresponde ao método handler em index.js. Se o handler da sua função tiver uma configuração diferente, atualize o arquivo e o método correspondentes.

  4. Na aba Code, clique no ícone image.png à direita de Test Function. Na lista suspensa, selecione Configure Test Parameters. Insira os seguintes parâmetros de teste de exemplo e clique em OK.

    {
      "key": "value"
    }
  5. Clique em Test Function.

    Após a execução bem-sucedida da função, verifique a resposta. A resposta é value.

Exemplo 2: Ler e gravar recursos OSS com segurança usando um par AccessKey temporário

Código de exemplo

Use o par AccessKey temporário fornecido pelo Function Compute para acessar o Object Storage Service (OSS). O código a seguir serve como exemplo.

Módulo ES

Nota

Este exemplo executa apenas em runtimes Node.js 18 ou 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
    }
};

Descrição do código:

  • context.credentials: obtém o par AccessKey temporário do parâmetro de contexto. Isso evita a codificação fixa de informações sensíveis, como senhas, no código.

  • myObj: o nome do objeto OSS.

  • Buffer.from('hello, fc', "utf-8"): o conteúdo do objeto a ser enviado.

  • return "put object": se o envio for bem-sucedido, put object é retornado.

  • throw err: se o envio falhar, uma exceção é lançada.

Módulo CommonJS

Nota

Este código de exemplo suporta implantação com um clique. Implante este código no Function Compute (FC) com um único clique.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);
    });  
};

Descrição do código:

  • context.credentials: obtém o par AccessKey temporário do parâmetro context. Isso evita a codificação fixa de dados sensíveis como senhas no código.

  • myObj: o nome do objeto OSS.

  • Buffer.from('hello, fc', "utf-8"): o conteúdo do objeto para upload.

  • callback(null, 'put object'): se o envio for bem-sucedido, put object é retornado.

  • callback(err): se o envio falhar, err é retornado.

Pré-requisitos

Procedimento

  1. Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Function Management > Functions.

  2. Na barra de navegação superior, selecione uma região. Na página Functions, clique na função de destino.

  3. (Opcional) Na aba Function Details da função, clique na aba Code. Na seção WebIDE, escolha para abrir um terminal. Em seguida, execute o comando abaixo para instalar a dependência ali-oss.

    npm install ali-oss --save

    Após a conclusão da instalação, a pasta node_modules é gerada no diretório de código à esquerda do WebIDE. Essa pasta contém o diretório ali-oss e outras bibliotecas dependentes.

  4. Na aba Function Details da função, clique na aba Code. No editor de código, insira o código de exemplo fornecido acima. Salve o código e clique em Deploy.

    Nota
    • No código de exemplo, o handler da função é o método handler no arquivo index.js ou index.mjs. Se sua função utilizar um handler diferente, atualize o arquivo e o método adequadamente.

    • No código de exemplo, defina region e bucket conforme suas necessidades.

  5. Clique em Test Function.

    Após a execução da função, visualize o resultado retornado. O resultado é put object.

Exemplo 3: Chamar um comando externo

Um programa Node.js também pode criar um processo fork para chamar comandos externos. Por exemplo, use o módulo child_process para executar o comando Linux ls -l e listar os arquivos no diretório atual. O código a seguir fornece um exemplo.

Módulo ES

Nota

Este exemplo executa apenas em runtimes Node.js 18 e 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 suporta implantação com um clique. Implante este código no Function Compute (FC) com um único clique.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);
});
}

Exemplo 4: Chamar uma função usando um gatilho HTTP

Código de exemplo

Use a URL fornecida pelo gatilho HTTP para chamar a função. O código a seguir serve como exemplo.

  • Se o Authentication Method do gatilho HTTP estiver definido como No Authentication, use o Postman ou um comando curl para chamar a função. Para mais informações, consulte Procedimento.

  • Se o Authentication Method do gatilho HTTP estiver configurado como Signature Authentication, JWT authentication or Bearer authentication, use o método de autenticação correspondente para chamar a função. Para mais informações, consulte Autenticação.

Para informações sobre os formatos de payload de requisição e resposta em chamadas feitas por gatilhos HTTP, consulte Chamar uma função usando um gatilho HTTP.

Módulo ES

Nota

Este exemplo é compatível apenas com runtimes Node.js 18 ou 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 exemplo suporta implantação com um clique. Implante este código no Function Compute (FC) com um único clique.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
  });
}

Pré-requisitos

Crie uma função com runtime Node.js e um gatilho HTTP conforme os exemplos anteriores. Para mais informações, consulte Criar uma função acionada por evento e Configurar um gatilho HTTP. Para especificar o código como módulo ES, selecione Node.js 18 ou Node.js 20 como runtime ao criar a função.

Procedimento

  1. Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Function Management > Functions.

  2. Na barra de navegação superior, selecione uma região. Na página Functions, clique na função de destino.

  3. Na página de detalhes da função, clique na aba Triggers. Na página Triggers, obtenha o endpoint público do gatilho HTTP.

  4. Execute o seguinte comando em uma ferramenta curl para chamar a função.

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

    No comando acima, https://test-nodejs-dlgxxr****.cn-shanghai.fcapp.run é o endpoint público do gatilho HTTP.

    A seguinte resposta é retornada.

    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!

Exemplo 5: Usar um gatilho HTTP para baixar um arquivo

Código de exemplo

Para retornar uma imagem, um pacote compactado ou um arquivo binário do seu código, use um gatilho HTTP. O código a seguir fornece um exemplo.

Módulo ES

Nota

Este exemplo é compatível apenas com runtimes Node.js 18 ou 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
        });
    }
};

Pré-requisitos

Crie uma função com runtime Node.js e um gatilho HTTP seguindo os exemplos anteriores. Para mais informações, consulte Criar uma função acionada por evento e Configurar um gatilho HTTP. Para especificar o código como módulo ES, defina o runtime como Node.js 18 ou Node.js 20 durante a criação da função.

Procedimento

  1. Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Function Management > Functions.

  2. Na barra de navegação superior, selecione uma região. Na página Functions, clique na função de destino.

  3. Na página de detalhes da função, clique na aba Code e escolha para abrir uma janela de terminal. Execute o comando npm install mime@2 para instalar a biblioteca mime. Após concluir a instalação, clique em Deploy.

  4. Na aba Trigger da função, obtenha o Internet Endpoint do gatilho HTTP. Copie a URL, cole-a no navegador e pressione Enter.

    Ao pressionar Enter, a função é acionada. Se a execução for bem-sucedida, o arquivo será baixado para sua máquina local.