Váltás Express.js-ról Azure Functions-ra
Express.js az egyik legnépszerűbb Node.js keretrendszer a webfejlesztők számára, és továbbra is kiváló választás API-végpontokat kiszolgáló alkalmazások létrehozásához.
Amikor a kódot kiszolgáló nélküli architektúrába migrálja, a Express.js végpontok újrabontása a következő területeket érinti:
Köztes szoftver: Express.js a köztes szoftver robusztus gyűjteményével rendelkezik. Számos közbenső szoftvermodulra már nincs szükség a Azure Functions és az Azure API Management képességeinek fényében. A végpontok migrálása előtt győződjön meg arról, hogy az alapvető köztes szoftver által kezelt összes logikát replikálhatja vagy lecserélheti.
Eltérő API-k: A kérések és válaszok feldolgozására használt API különbözik Azure Functions és Express.js. Az alábbi példa a szükséges módosításokat részletezi.
Alapértelmezett útvonal: Alapértelmezés szerint Azure Functions végpontok vannak elérhetővé téve az
api
útvonal alatt. Az útválasztási szabályok a host.json fájlban konfigurálhatókroutePrefix
.Konfiguráció és konvenciók: A Functions-alkalmazások a function.json fájllal definiálják a HTTP-parancsokat, biztonsági szabályzatokat határoznak meg, valamint konfigurálhatják a függvény bemenetét és kimenetét. Alapértelmezés szerint a függvényfájlokat tartalmazó mappanév határozza meg a végpont nevét, de a nevet a
route
function.json fájl tulajdonságán keresztül módosíthatja.
Tipp
További információ: Az Node.js és az Express API-k újrabontása kiszolgáló nélküli API-kba Azure Functions.
Példa
Express.js
Az alábbi példa egy tipikus Express.js GET
végpontot mutat be.
// 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}`);
}
});
Amikor egy kérést GET
küld a rendszernek /hello
, a rendszer egy HTTP 200
olyan választ ad vissza, amely Success
tartalmazza a választ. Ha a végpont hibába ütközik, a válasz a HTTP 500
hiba részleteivel együtt jelenik meg.
Azure Functions
Azure Functions az egyes függvények konfigurációs és kódfájljait egyetlen mappába rendezi. Alapértelmezés szerint a mappa neve határozza meg a függvény nevét.
Egy nevű hello
függvénynek például van egy mappája a következő fájlokkal.
| - hello
| - function.json
| - index.js
Az alábbi példa ugyanazt az eredményt valósítja meg, mint a fenti Express.js végpont, de 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}`
};
}
};
A Functionsre való áttéréskor a következő módosítások történnek:
Modul: A függvénykód JavaScript-modulként van implementálva.
Környezeti és válaszobjektum: A
context
lehetővé teszi a függvény futtatókörnyezetével való kommunikációt. A környezetből beolvashatja a kérelemadatokat, és beállíthatja a függvény válaszát. A szinkron kódhoz az 1.x-etcontext.done()
kell meghívnia a végrehajtás befejezéséhez, míg a 2.x+async
függvény implicit módon oldja fel a kérést.Elnevezési konvenció: A rendszer alapértelmezés szerint a Azure Functions fájlokat tartalmazó mappanevet használja végpontnévként (ezt felül lehet bírálni a function.json fájlban).
Konfiguráció: A http-parancsokat a function.json fájlban definiálhatja, például
POST
vagyPUT
.
A függvény konfigurációs adatait az alábbi function.json fájl tartalmazza.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": ["get"]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
A tömbben való methods
definiálással get
a függvény elérhető a HTTP-kérések GET
számára. Ha azt szeretné, hogy az API fogadja el a támogatási POST
kéréseket, hozzáadhatja post
a tömbhöz is.