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 routefunction.json fájl tulajdonságán keresztül módosíthatja.

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-et context.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 vagy PUT.

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.

Következő lépések