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 Copier lienLien copié sur presse-papiers!
- Avant de pouvoir développer des fonctions, vous devez suivre les étapes de la section Configuration des fonctions OpenShift Serverless.
6.5.2. Structure du modèle de fonction Node.js Copier lienLien copié sur presse-papiers!
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
- 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
npm install --save opossum
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 Copier lienLien copié sur presse-papiers!
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 Copier lienLien copié sur presse-papiers!
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)
function handle(context, data)
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 Copier lienLien copié sur presse-papiers!
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
6.5.3.1.2. Données CloudEvent Copier lienLien copié sur presse-papiers!
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" }
{
"customerId": "0123456",
"productId": "6543210"
}
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)
function handle(context, data)
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 Copier lienLien copié sur presse-papiers!
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 :
6.5.4.1. Renvoi des en-têtes Copier lienLien copié sur presse-papiers!
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 } }; }
function handle(context, customer) {
// process customer and return custom headers
// the response will be '204 No content'
return { headers: { customerid: customer.id } };
}
6.5.4.2. Renvoi des codes d'état Copier lienLien copié sur presse-papiers!
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
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
6.5.5. Tester les fonctions Node.js Copier lienLien copié sur presse-papiers!
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
- Naviguez jusqu'au dossier test de votre fonction.
Exécutez les tests :
npm test
$ npm test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5.6. Prochaines étapes Copier lienLien copié sur presse-papiers!
- Voir la documentation de référence de l'objet contextuel Node.js.
- Construire et déployer une fonction.