6.5. Développer des fonctions Node.js


Après avoir créé un projet de fonction Node.js, vous pouvez modifier les fichiers modèles fournis pour ajouter une logique commerciale à votre fonction. Cela inclut la configuration de l'invocation de la fonction et des en-têtes et codes d'état renvoyés.

6.5.1. Conditions préalables

6.5.2. Structure du modèle de fonction Node.js

Lorsque vous créez une fonction Node.js à l'aide de la CLI Knative (kn), le répertoire du projet ressemble à un projet Node.js classique. La seule exception est le fichier supplémentaire func.yaml, qui est utilisé pour configurer la fonction.

Les fonctions de déclenchement http et event ont la même structure de modèle :

Structure du modèle

.
├── func.yaml 
1

├── index.js 
2

├── package.json 
3

├── README.md
└── test 
4

    ├── integration.js
    └── unit.js
Copy to Clipboard Toggle word wrap

1
Le fichier de configuration func.yaml est utilisé pour déterminer le nom et le registre de l'image.
2
Votre projet doit contenir un fichier index.js qui exporte une seule fonction.
3
Vous n'êtes pas limité aux dépendances fournies dans le fichier modèle package.json. Vous pouvez ajouter des dépendances supplémentaires comme vous le feriez dans n'importe quel autre projet Node.js.

Exemple d'ajout de dépendances npm

npm install --save opossum
Copy to Clipboard Toggle word wrap

Lorsque le projet est construit pour être déployé, ces dépendances sont incluses dans l'image du conteneur d'exécution créé.

4
Les scripts de tests d'intégration et d'unité sont fournis dans le cadre du modèle de fonction.

6.5.3. A propos de l'invocation des fonctions Node.js

Lorsque vous utilisez le CLI Knative (kn) pour créer un projet de fonction, vous pouvez générer un projet qui répond aux CloudEvents, ou un projet qui répond aux simples requêtes HTTP. Dans Knative, les CloudEvents sont transportés par HTTP sous la forme d'une requête POST, de sorte que les deux types de fonctions écoutent les événements HTTP entrants et y répondent.

Les fonctions Node.js peuvent être invoquées à l'aide d'une simple requête HTTP. Lorsqu'une requête est reçue, les fonctions sont invoquées avec un objet context comme premier paramètre.

6.5.3.1. Objets contextuels Node.js

Les fonctions sont invoquées en fournissant un objet context comme premier paramètre. Cet objet permet d'accéder aux informations de la requête HTTP entrante.

Exemple d'objet contextuel

function handle(context, data)
Copy to Clipboard Toggle word wrap

Ces informations comprennent la méthode de requête HTTP, les chaînes de requête ou les en-têtes envoyés avec la requête, la version HTTP et le corps de la requête. Les demandes entrantes qui contiennent un CloudEvent attachent l'instance entrante du CloudEvent à l'objet de contexte de sorte qu'il est possible d'y accéder en utilisant context.cloudevent.

6.5.3.1.1. Méthodes de l'objet contextuel

L'objet context possède une seule méthode, cloudEventResponse(), qui accepte une valeur de données et renvoie un CloudEvent.

Dans un système Knative, si une fonction déployée en tant que service est invoquée par un courtier d'événements envoyant un CloudEvent, le courtier examine la réponse. Si la réponse est un CloudEvent, cet événement est traité par le courtier.

Exemple de méthode d'objet contextuel

// 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();
}
Copy to Clipboard Toggle word wrap

6.5.3.1.2. Données CloudEvent

Si la demande entrante est un CloudEvent, toutes les données associées au CloudEvent sont extraites de l'événement et fournies en tant que deuxième paramètre. Par exemple, si un CloudEvent est reçu et qu'il contient une chaîne JSON dans sa propriété data qui est similaire à ce qui suit :

{
  "customerId": "0123456",
  "productId": "6543210"
}
Copy to Clipboard Toggle word wrap

Lorsqu'elle est invoquée, le deuxième paramètre de la fonction, après l'objet context, est un objet JavaScript qui possède les propriétés customerId et productId.

Exemple de signature

function handle(context, data)
Copy to Clipboard Toggle word wrap

Dans cet exemple, le paramètre data est un objet JavaScript qui contient les propriétés customerId et productId.

6.5.4. Valeurs de retour des fonctions Node.js

Les fonctions peuvent renvoyer n'importe quel type JavaScript valide ou ne pas avoir de valeur de retour. Lorsqu'une fonction n'a pas de valeur de retour spécifiée et qu'aucun échec n'est indiqué, l'appelant reçoit une réponse 204 No Content.

Les fonctions peuvent également renvoyer un objet CloudEvent ou Message afin de pousser les événements dans le système Knative Eventing. Dans ce cas, le développeur n'est pas tenu de comprendre ou de mettre en œuvre la spécification de messagerie CloudEvent. Les en-têtes et autres informations pertinentes des valeurs renvoyées sont extraites et envoyées avec la réponse.

Exemple :

function handle(context, customer) {
  // process customer and return a new CloudEvent
  return new CloudEvent({
    source: 'customer.processor',
    type: 'customer.processed'
  })
}
Copy to Clipboard Toggle word wrap

6.5.4.1. Renvoi des en-têtes

Vous pouvez définir un en-tête de réponse en ajoutant une propriété headers à l'objet return. Ces en-têtes sont extraits et envoyés avec la réponse à l'appelant.

Exemple d'en-tête de réponse

function handle(context, customer) {
  // process customer and return custom headers
  // the response will be '204 No content'
  return { headers: { customerid: customer.id } };
}
Copy to Clipboard Toggle word wrap

6.5.4.2. Renvoi des codes d'état

Vous pouvez définir un code d'état qui sera renvoyé à l'appelant en ajoutant une propriété statusCode à l'objet return:

Exemple de code d'état

function handle(context, customer) {
  // process customer
  if (customer.restricted) {
    return { statusCode: 451 }
  }
}
Copy to Clipboard Toggle word wrap

Des codes d'état peuvent également être définis pour les erreurs créées et déclenchées par la fonction :

Exemple de code d'état d'erreur

function handle(context, customer) {
  // process customer
  if (customer.restricted) {
    const err = new Error(‘Unavailable for legal reasons’);
    err.statusCode = 451;
    throw err;
  }
}
Copy to Clipboard Toggle word wrap

6.5.5. Tester les fonctions Node.js

Les fonctions Node.js peuvent être testées localement sur votre ordinateur. Dans le projet par défaut qui est créé lorsque vous créez une fonction en utilisant kn func create, il y a un dossier test qui contient quelques tests unitaires et d'intégration simples.

Conditions préalables

  • L'opérateur OpenShift Serverless et Knative Serving sont installés sur le cluster.
  • Vous avez installé le CLI Knative (kn).
  • Vous avez créé une fonction en utilisant kn func create.

Procédure

  1. Naviguez jusqu'au dossier test de votre fonction.
  2. Exécutez les tests :

    $ npm test
    Copy to Clipboard Toggle word wrap

6.5.6. Prochaines étapes

Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat