Skip to Content
Mélodium 0.10.1 is now available!
DocsExemplesTransformation JavaScript

Transformation JavaScript

Source: 05_javascript_transform

Un serveur HTTP qui applique une fonction JavaScript à chaque payload JSON entrant et renvoie le résultat transformé. Le moteur JS est déclaré comme modèle afin que la fonction soit compilée une seule fois au démarrage et réutilisée pour toutes les requêtes concurrentes.

Exécution

melodium run 05_javascript_transform/Compo.toml
$ curl -X POST http://127.0.0.1:8080/transform \ -H "Content-Type: application/json" \ -d '{"name":"Alice","score":82}' {"name":"Alice","score":82,"grade":"B","note":"processed by Mélodium JS engine"}

Fonctionnement

Le modèle Transformer embarque la fonction JavaScript directement dans le source :

model Transformer() : JavaScriptEngine { code = " function transform(input) { var grade = 'F'; if (input.score >= 90) grade = 'A'; return { name: input.name, score: input.score, grade: grade, … }; } " }

Le moteur JS compile cette fonction une fois à l’instanciation du modèle. Chaque requête appelle ensuite process[engine=engine](code="transform(value)"), qui invoque la fonction compilée avec la valeur JSON parsée.

See in Compositeur Studio

Le sous-traitement jsTransform

Self.data -> decode.data,text -> toJson.text,json -> unwrap.option,value -> process.value,result -> unwrapOr.option,value -> toString.value,into -> encode.text,data -> Self.data

Deux stratégies de dépaquetage différentes sont utilisées délibérément :

Le sous-traitement jsTransform déclare son propre model engine: Transformer(), qui partage l’instance avec l’engine de main via la propagation de modèles de Mélodium — la fonction n’est pas recompilée par requête.

Dépendances

[dependencies] std = "0.10.1" # flux de base, journalisation, structures de données http = "0.10.1" # serveur et client HTTP net = "0.10.1" # utilitaires d'adresses IP json = "0.10.1" # parsing et sérialisation JSON encoding = "0.10.1" # encodage / décodage UTF-8 javascript = "0.10.1" # moteur JavaScript embarqué