Tous les produits
Search
Centre de documentation

Function Compute:Handler

Dernière mise à jour :Aug 12, 2026

Un handler Node.js permet de répondre aux événements et d'exécuter votre logique métier. Cette rubrique décrit le concept et la structure des handlers Node.js, avec des exemples à l'appui.

Qu'est-ce qu'un handler ?

Le handler d'une fonction FC correspond à la méthode de votre code qui traite les requêtes. Lors de l'invocation de votre fonction FC, Function Compute exécute le handler configuré pour traiter la requête. Vous pouvez configurer le handler dans la console Function Compute via le paramètre Handler.

Pour une fonction FC Node.js, le format du handler est filename.methodName. Par exemple, si votre fichier s'appelle index.js ou index.mjs et que la méthode se nomme handler, le handler sera index.handler.

Pour plus d'informations sur les fonctions FC et les opérations associées, consultez Créer une fonction déclenchée par événement.

Les configurations des handlers doivent respecter les spécifications de configuration de Function Compute. Ces spécifications varient selon le type de handler.

Signature du handler

Remarque

Function Compute prend en charge les modules ECMAScript (ES) à partir du runtime Node.js 18. Auparavant (Node.js 16 et versions antérieures), Function Compute ne prenait en charge que les modules CommonJS. Pour plus d'informations, consultez Spécifier un handler comme module ES.

Un handler d'événement simple possède la signature suivante :

Node.js 18 ou Node.js 20

Module ES

Remarque

Cet exemple de code prend en charge le déploiement en un clic. Vous pouvez déployer le code directement dans Function Compute (FC).start-fc3-nodejs-es

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

Module CommonJS

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

Node.js 16 et versions antérieures

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

L'exemple de code ci-dessus se décrit comme suit :

handler est le nom de la méthode, correspondant au Handler configuré dans la console Function Compute. Par exemple, si vous spécifiez index.handler comme Handler lors de la création d'une fonction, Function Compute charge la fonction handler définie dans index.js et lance son exécution.

Le runtime Function Compute transmet les paramètres de requête au handler. Le premier paramètre est l'objet event, qui contient la charge utile de la requête. Cet objet event est de type Buffer ; vous pouvez le convertir vers le type d'objet souhaité. Le second paramètre est l'objet context, fournissant les informations contextuelles du runtime pour l'invocation. Pour plus d'informations, consultez Contexte.

    Remarque
    • Avec le runtime Node.js 18 ou ultérieur, privilégiez la fonctionnalité Async/Await plutôt que le callback.

    • Function Compute convertit le résultat retourné en fonction de son type.

      • Type Buffer : retourné tel quel.

      • Type Object : converti au format JSON puis retourné.

      • Autres types : convertis en chaîne de caractères puis retournés.

Async/Await

Dans un environnement runtime Node.js 18 ou ultérieur, l'approche Async/Await est recommandée. Elle offre une écriture concise et lisible du code asynchrone en Node.js, évitant ainsi les callbacks imbriqués ou les appels chaînés.

Important

Sous le runtime Node.js 16 ou une version antérieure, vous devez utiliser explicitement la méthode callback pour envoyer une réponse. À défaut, la requête expirera.

Comparée aux fonctions de rappel callback, l'approche Async/Await présente les avantages suivants :

  • Meilleure lisibilité : Le code utilisant async/await adopte une structure linéaire et synchrone, facilitant sa compréhension et sa maintenance. L'absence de callbacks profondément imbriqués rend la structure du code plus claire.

  • Débogage et gestion des erreurs simplifiés : Les blocs try-catch permettent de capturer et gérer plus aisément les erreurs dans les opérations asynchrones. La pile d'erreurs étant plus explicite, vous pouvez identifier l'origine d'une erreur avec plus de précision.

  • Efficacité accrue : Les callbacks nécessitent souvent des bascules entre différentes parties du code. L'approche async/await réduit ces changements de contexte, améliorant ainsi l'efficacité du code.

Exemple 1 : Analyser des paramètres au format JSON

Exemple de code

Function Compute transmet directement les paramètres au format JSON à votre fonction. Il vous appartient de les analyser dans votre code. L'extrait suivant montre comment analyser un événement au format JSON.

Module ES

Remarque

Cet exemple fonctionne uniquement avec les runtimes Node.js 18 et ultérieurs.

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

Module CommonJS

Remarque

Cet exemple de code prend en charge le déploiement en un clic. Vous pouvez déployer ce code dans Function Compute (FC) en un seul clic.start-fc3-nodejs-json

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

Prérequis

Créez une fonction Node.js. Pour plus d'informations, consultez Créer une fonction déclenchée par événement. Si vous souhaitez spécifier votre code comme module ES, sélectionnez Node.js 18 ou Node.js 20 comme runtime lors de la création de la fonction.

Procédure

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. Sur la page de configuration de la fonction, sélectionnez l'onglet Code. Dans l'éditeur de code, saisissez l'exemple de code précédent, puis cliquez sur Deploy.

    Remarque

    Dans l'exemple de code précédent, le handler de la fonction correspond à la méthode handler située dans index.js. Si le handler de votre fonction est configuré différemment, mettez à jour le fichier et la méthode correspondants.

  4. Sous l'onglet Code, cliquez sur l'icône image.png située à droite de Test Function. Dans la liste déroulante, sélectionnez Configure Test Parameters. Saisissez les paramètres de test suivants, puis cliquez sur OK.

    {
      "key": "value"
    }
  5. Cliquez sur Test Function.

    Une fois la fonction exécutée avec succès, vérifiez la réponse. Celle-ci doit être value.

Exemple 2 : Lire et écrire en toute sécurité des ressources OSS à l'aide d'une paire AccessKey temporaire

Exemple de code

Utilisez la paire AccessKey temporaire fournie par Function Compute pour accéder à Object Storage Service (OSS). Le code suivant fournit un exemple.

Module ES

Remarque

Cet exemple s'exécute uniquement sous les runtimes Node.js 18 ou ultérieurs.

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

Description du code :

  • context.credentials : Récupère la paire AccessKey temporaire depuis le paramètre context. Cela évite d'inscrire en dur dans le code des informations sensibles telles que des mots de passe.

  • myObj : Nom de l'objet OSS.

  • Buffer.from('hello, fc', "utf-8") : Contenu de l'objet à télécharger.

  • return "put object" : Retourne put object si le téléchargement réussit.

  • throw err : Lève une exception en cas d'échec du téléchargement.

Module CommonJS

Remarque

Cet exemple de code prend en charge le déploiement en un clic. Déployez ce code dans Function Compute (FC) en un seul 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);
    });  
};

Description du code :

  • context.credentials : Récupère la paire AccessKey temporaire depuis le paramètre context. Cela évite d'inscrire en dur dans le code des informations sensibles telles que des mots de passe.

  • myObj : Nom de l'objet OSS.

  • Buffer.from('hello, fc', "utf-8") : Contenu de l'objet à télécharger.

  • callback(null, 'put object') : Retourne put object si le téléchargement réussit.

  • callback(err) : Retourne err en cas d'échec du téléchargement.

Prérequis

Procédure

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. (Facultatif) Sous l'onglet Function Details de la fonction, cliquez sur l'onglet Code. Dans la section WebIDE, choisissez pour ouvrir un terminal. Exécutez ensuite la commande suivante afin d'installer la dépendance ali-oss.

    npm install ali-oss --save

    Une fois l'installation terminée, le dossier node_modules apparaît dans le répertoire de code situé à gauche du WebIDE. Ce dossier contient le répertoire ali-oss ainsi que d'autres bibliothèques de dépendances.

  4. Sous l'onglet Function Details de la fonction, cliquez sur l'onglet Code. Dans l'éditeur de code, saisissez l'exemple de code fourni ci-dessus. Enregistrez ensuite le code et cliquez sur Deploy.

    Remarque
    • Dans cet exemple, le handler de la fonction correspond à la méthode handler située dans le fichier index.js ou index.mjs. Si votre fonction utilise un autre handler, mettez à jour le fichier et la méthode en conséquence.

    • Vous devez définir region et bucket selon vos besoins spécifiques.

  5. Cliquez sur Test Function.

    Après l'exécution de la fonction, consultez le résultat retourné. Celui-ci devrait être put object.

Exemple 3 : Appeler une commande externe

Un programme Node.js peut également créer un processus fork pour invoquer des commandes externes. Par exemple, le module child_process permet d'appeler la commande Linux ls -l afin de lister les fichiers du répertoire courant. Le code suivant en fournit un exemple.

Module ES

Remarque

Cet exemple s'exécute uniquement sous les runtimes Node.js 18 et ultérieurs.

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

Module CommonJS

Remarque

Ce code prend en charge le déploiement en un clic. Vous pouvez déployer ce code dans Function Compute (FC) en un seul 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);
});
}

Exemple 4 : Appeler une fonction à l'aide d'un déclencheur HTTP

Exemple de code

Utilisez l'URL fournie par le déclencheur HTTP pour appeler la fonction. Le code suivant en est un exemple.

  • Si la Authentication Method du déclencheur HTTP est définie sur No Authentication, utilisez Postman ou une commande curl pour appeler la fonction. Pour plus d'informations, consultez Procédure.

  • Si la Authentication Method du déclencheur HTTP est définie sur Signature Authentication, JWT authentication or Bearer authentication, utilisez la méthode d'authentification correspondante pour appeler la fonction. Pour plus d'informations, consultez Authentification.

Pour obtenir des informations sur les formats de charge utile des requêtes et des réponses lors d'appels via des déclencheurs HTTP, consultez Appeler une fonction à l'aide d'un déclencheur HTTP.

Module ES

Remarque

Cet exemple fonctionne uniquement avec les runtimes Node.js 18 ou ultérieurs.

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

Module CommonJS

Remarque

Cet exemple de code prend en charge le déploiement en un clic. Vous pouvez déployer ce code dans Function Compute (FC) en un seul 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
  });
}

Prérequis

Une fonction utilisant le runtime Node.js et un déclencheur HTTP ont été créés conformément aux exemples précédents. Pour plus d'informations, consultez Créer une fonction déclenchée par événement et Configurer un déclencheur HTTP. Si vous souhaitez spécifier le code comme module ES, sélectionnez Node.js 18 ou Node.js 20 pour le runtime lors de la création de la fonction.

Procédure

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. Sur la page de détails de la fonction, cliquez sur l'onglet Triggers. Sur la page Triggers, récupérez l'endpoint public du déclencheur HTTP.

  4. Exécutez la commande suivante dans un outil curl pour appeler la fonction.

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

    Dans la commande précédente, https://test-nodejs-dlgxxr****.cn-shanghai.fcapp.run représente l'endpoint public du déclencheur HTTP.

    La réponse suivante est retournée.

    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!

Exemple 5 : Utiliser un déclencheur HTTP pour télécharger un fichier

Exemple de code

Pour retourner une image, un package compressé ou un fichier binaire depuis votre code, utilisez un déclencheur HTTP. Le code suivant en fournit un exemple.

Module ES

Remarque

Cet exemple fonctionne uniquement avec les runtimes Node.js 18 ou ultérieurs.

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

Module 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érequis

Créez une fonction utilisant le runtime Node.js ainsi qu'un déclencheur HTTP conformément aux exemples précédents. Pour plus d'informations, consultez Créer une fonction déclenchée par événement et Configurer un déclencheur HTTP. Si vous souhaitez spécifier le code comme module ES, définissez le runtime sur Node.js 18 ou Node.js 20 lors de la création de la fonction.

Procédure

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. Sur la page de détails de la fonction, cliquez sur l'onglet Code, puis choisissez pour ouvrir une fenêtre de terminal. Exécutez la commande npm install mime@2 pour installer la bibliothèque mime. Une fois l'installation terminée, cliquez sur Deploy.

  4. Sous l'onglet Trigger de la fonction, récupérez l'Internet Endpoint du déclencheur HTTP. Copiez l'URL dans votre navigateur et appuyez sur Entrée.

    Cette action déclenche la fonction. Si l'exécution réussit, le fichier sera téléchargé sur votre machine locale.