edge.js verbindet Node.js und .NET Framework in einem Prozess

Seite 4: C#-Alternativen

Inhaltsverzeichnis

Neben C# sind auch andere .NET-Programmiersprachen in Verbindung mit edge.js möglich. Die Integration von Python basiert auf IronPython, das separat auf dem Rechner zu installieren ist. Auch bei dieser Installation ist die Frage nach dem Anpassen der %Path%-Umgebungsvariable wieder unbedingt mit "ja" zu beantworten. Nun hat man noch die notwendige Ergänzung von egde.js für Python mit npm install edge-py einzurichten. Unter Python ist es notwendig, dass das aufgerufene Skript eine Lambda-Expression in der Form Lambda x: return "Python welcomes" + x an den Node.js-Prozess zurückliefert:

var edge = require('edge');

var hallo = edge.func('py', function () {/*
def hallo(input):
return "Python begrüßt " + input

lambda x: hallo(x)
*/});

hallo('Node.js', function (fehler, ergebnis) {
if (fehler) throw fehler;
console.log(ergebnis);
});

Auch für die Integration mit der PowerShell muss der Anwender neben der PowerShell selbst ein npm-Modul (npm install edge-ps) installieren. Beim Aufruf der Skripte wird der Parameter aus Node.js in der Variablen $inputFromJS abgelegt. Die Ergebnisse aus der PowerShell werden immer als Array zurückgeliefert. Das folgende Listing zeigt das Beispiel der Ausführung eines PowerShell-Pipeline-Befehls mit drei Commandlets.

var edge = require('edge');

var hallo = edge.func('py', function () {/*
def hallo(input):
return "Python begrüßt " + input

lambda x: hallo(x)
*/});

hallo('Node.js', function (fehler, ergebnis) {
if (fehler) throw fehler;
console.log(ergebnis);
});

Der Befehl sortiert aus den Windows-Systemdiensten diejenigen heraus, die anhaltbar sind und dem von Node.js übergebenen Namensmuster (z. B. SQL*) entsprechen. Die Ausgabe für den im vorigen Listing dargestellten Code zeigt Abbildung 6.

Ausgabe des Beispiels Node.js und PowerShell (Abb. 6)

Dave Thomas dokumentiert in seinem Blog die Hintergründe, wie er die Anbindung von F# gestaltet hat. Sollte durch den vorliegenden Beitrag das Interesse an einem Modul für Visual Basic .NET entstanden sein, hat Janczuk eine ausführliche und verständliche Anleitung geschrieben, wie man weitere .NET-Sprachen in edge.js integrieren kann.

edge.js eignet sich nicht nur für die direkte Integration von .NET-Programmiersprachen, sondern auch zur Entwicklung funktionaler Node.js-Module auf Basis der .NET-Klassenbibliothek. Janczuk zeigt mit Edge-SQL einen interessanten Ansatz, in dem er mit den beiden .NET-Bibliotheken ADO.NET und Task Parallel Library (TPL) eine asynchrone Schnittstelle zu relationalen Datenbanken und anderen Datenquellen entwickelt hat, die über ADO.NET ansprechbar sind.

Installiert wird dieses Modul mit dem Kommandozeilen-Befehl npm install edge-sql. Nachdem dann die Verbindungs-Zeichenkette zur Datenquelle in der Umgebungsvariablen EDGE_SQL_CONNECTION_STRING abgelegt wurde, kann die Verwendung von Edge-SQL beginnen. Dabei kann der Entwickler sowohl einfache und parametrierte Abfragen als auch DML-Befehle ausführen:

var edge = require('edge');

var getTop10Produkte = edge.func('sql', function () {/*
select top 10 * from Products
*/});

getTop10Produkte(null, function (ausnahme, ergebnis) {
if (ausnahme) throw ausnahme;
console.log(ergebnis);
});

var getProduktMitID = edge.func('sql', function () {/*
select * from Products
where ProductId = @meineProduktId
*/});

getProduktMitID({ myProductId: 10 }, function (ausnahme, ergebnis) {
if (ausnahme) throw ausnahme;
console.log(ergebnis);
})