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říkazu routePrefix 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 /helloadresu 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.x context.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 nebo PUT.

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