Přechod z Express.js na Azure Functions
Express.js je jednou z nejoblíbenějších architektur Node.js pro webové vývojáře a zůstává skvělou volbou pro vytváření aplikací, které obsluhují koncové body rozhraní API.
Při migraci kódu na bezserverovou architekturu má refaktoring Express.js koncových bodů vliv na následující oblasti:
Middleware: Express.js obsahuje robustní kolekci middlewaru. Řada modulů middlewaru se už s ohledem na možnosti Azure Functions a Azure API Management nevyžaduje. Před migrací koncových bodů se ujistěte, že můžete replikovat nebo nahradit jakoukoli logiku, kterou zpracovává základní middleware.
Různá rozhraní API: Rozhraní API používané ke zpracování požadavků a odpovědí se u Azure Functions a Express.js liší. Následující příklad podrobně popisuje požadované změny.
Výchozí trasa: Ve výchozím nastavení se pod
api
trasou zobrazují koncové body Azure Functions. Pravidla směrování se dají konfigurovat pomocí příkazuroutePrefix
v souboru host.json.Konfigurace a konvence: Aplikace Functions používá soubor function.json k definování příkazů HTTP, definování zásad zabezpečení a ke konfiguraci vstupu a výstupu funkce. Ve výchozím nastavení název složky, která obsahuje soubory funkcí, definuje název koncového bodu, ale název můžete změnit prostřednictvím
route
vlastnosti v souboru function.json .
Tip
Další informace najdete v interaktivním kurzu Refaktoring Node.js a Express API na bezserverová rozhraní API s Azure Functions.
Příklad
Express.js
Následující příklad ukazuje typický koncový bod Express.js GET
.
// 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}`);
}
});
GET
Při odeslání požadavku na /hello
adresu se HTTP 200
vrátí odpověď obsahující Success
. Pokud koncový bod narazí na chybu, odpověď bude HTTP 500
s podrobnostmi o chybě.
Azure Functions
Azure Functions uspořádá konfigurační soubory a soubory kódu do jedné složky pro každou funkci. Ve výchozím nastavení název složky určuje název funkce.
Například funkce s názvem hello
má složku s následujícími soubory.
| - hello
| - function.json
| - index.js
Následující příklad implementuje stejný výsledek jako výše uvedený koncový bod Express.js, ale s 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}`
};
}
};
Při přechodu na Functions se provedou následující změny:
Modul: Kód funkce se implementuje jako modul JavaScriptu.
Objekt kontextu a odpovědi: Objekt
context
umožňuje komunikovat s modulem runtime funkce. Z kontextu můžete číst data požadavku a nastavit odpověď funkce. Synchronní kód vyžaduje volání 1.xcontext.done()
, aby se dokončilo provádění, zatímco funkce 2.x+async
přeloží požadavek implicitně.Zásady vytváření názvů: Název složky, který obsahuje soubory Azure Functions, se ve výchozím nastavení používá jako název koncového bodu (můžete ho přepsat v souboru function.json).
Konfigurace: Příkazy HTTP definujete v souboru function.json , například
POST
neboPUT
.
Následující soubor function.json obsahuje informace o konfiguraci funkce.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
get
Definováním v methods
poli je funkce dostupná pro požadavky HTTPGET
. Pokud chcete, aby rozhraní API přijímalo žádosti o podporu POST
, můžete také přidat post
do pole .
Další kroky
- Další informace najdete v interaktivním kurzu Refaktoring rozhraní API Node.js a Expressu na bezserverová rozhraní API s Azure Functions