Umsteigen von „Express.js“ auf Azure Functions
„Express.js“ gehört zu den beliebtesten Node.js-Frameworks für Webentwickler und bleibt weiterhin eine hervorragende Wahl zum Entwickeln von Apps, die API-Endpunkte bereitstellen.
Wenn Sie Code zu einer serverlosen Architektur migrieren, wirkt sich das Refactoring von Express.js-Endpunkten auf die folgenden Bereiche aus:
Middleware: „Express.js“ bietet eine robuste Sammlung von Middleware. Viele Middlewaremodule sind nicht mehr für Azure Functions und Funktionen von Azure API Management erforderlich. Stellen Sie vor der Migration von Endpunkten sicher, dass Sie die gesamte Logik, die von wichtiger Middleware verarbeitet wird, replizieren oder ersetzen können.
Abweichende APIs: Die API, die zur Verarbeitung von Anforderungen und Antworten verwendet wird, unterscheidet sich zwischen Azure Functions und „Express.js“. Im folgenden Beispiel werden die erforderlichen Änderungen erläutert.
Standardroute: Standardmäßig werden Azure Functions-Endpunkte unter der
api
-Route bereitgestellt. Routingregeln können überroutePrefix
in der Datei host.json konfiguriert werden.Konfiguration und Konventionen: Eine Functions-App verwendet die Datei function.json, um HTTP-Verben sowie Sicherheitsrichtlinien zu definieren und kann die Eingabe und Ausgabe der Funktion konfigurieren. Standardmäßig definiert der Ordnername, der die Funktionsdateien enthält, den Endpunktnamen, aber Sie können den Namen über die Eigenschaft
route
in der Datei function.json ändern.
Tipp
Weitere Informationen finden Sie im interaktiven Tutorial Refactoring von „Node.js“ und Express-APIs in serverlose APIs mit Azure Functions.
Beispiel
Express.js
Das folgende Beispiel zeigt einen typischen GET
-Endpunkt von „Express.js“.
// server.js
app.get('/hello', (req, res) => {
try {
res.send("Success!");
} catch(error) {
const err = JSON.stringify(error);
res.status(500).send(`Request error. ${err}`);
}
});
Wenn eine GET
-Anforderung an /hello
gesendet wird, wird eine HTTP 200
-Antwort zurückgegeben, die Success
enthält. Wenn für den Endpunkt ein Fehler auftritt, ist die Antwort HTTP 500
mit den Fehlerdetails.
Azure Functions
Azure Functions organisiert Konfigurations- und Codedateien in einem einzelnen Ordner für jede Funktion. Standardmäßig gibt der Name des Ordners den Funktionsnamen vor.
Beispielsweise verfügt eine Funktion mit dem Namen hello
über einen Ordner mit den folgenden Dateien.
| - hello
| - function.json
| - index.js
Im folgenden Beispiel wird das gleiche Ergebnis wie der Express.js-Endpunkt oben implementiert, jedoch mit Azure Functions.
// hello/index.js
module.exports = async function (context, req) {
try {
context.res = { body: "Success!" };
} catch(error) {
const err = JSON.stringify(error);
context.res = {
status: 500,
body: `Request error. ${err}`
};
}
};
Bei der Umstellung auf Functions werden die folgenden Änderungen vorgenommen:
Modul: Der Funktionscode wird als JavaScript-Modul implementiert.
Kontext und Antwortobjekt:
context
ermöglicht Ihnen die Kommunikation mit der Laufzeit der Funktion. Aus dem Kontext können Sie Anforderungsdaten lesen und die Antwort der Funktion festlegen. Synchroner Code erfordert, dass Sie 1.xcontext.done()
zum Abschluss der Ausführung aufrufen, während 2.xasync
-Funktionen oder höher die Anforderung implizit auflösen.Benennungskonvention: Der Ordnername, der zur Speicherung der Azure Functions-Dateien verwendet wird, wird standardmäßig als Endpunktname verwendet (dies kann in der Datei function.json überschrieben werden).
Konfiguration: Sie definieren die HTTP-Verben in der Datei function.json, z. B. mit
POST
oderPUT
.
Die folgende Datei function.json enthält Konfigurationsinformationen für die Funktion.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
Wenn Sie get
im methods
-Array definieren, steht die Funktion für HTTP-GET
-Anforderungen zur Verfügung. Wenn Ihre API POST
-Supportanforderungen akzeptieren soll, können Sie dem Array auch post
hinzufügen.
Nächste Schritte
- Weitere Informationen finden Sie im interaktiven Tutorial Refactoring von „Node.js“ und Express-APIs in serverlose APIs mit Azure Functions.