Växla från Express.js till Azure Functions

Express.js är ett av de mest populära Node.js ramverken för webbutvecklare och är fortfarande ett utmärkt val för att skapa appar som hanterar API-slutpunkter.

När du migrerar kod till en serverlös arkitektur påverkar refaktorisering Express.js slutpunkter följande områden:

  • Mellanprogram: Express.js har en robust samling mellanprogram. Många mellanprogramsmoduler krävs inte längre mot bakgrund av funktionerna Azure Functions och Azure API Management. Se till att du kan replikera eller ersätta all logik som hanteras av viktiga mellanprogram innan du migrerar slutpunkter.

  • Olika API:er: API:et som används för att bearbeta både begäranden och svar skiljer sig mellan Azure Functions och Express.js. I följande exempel beskrivs de ändringar som krävs.

  • Standardväg: Som standard exponeras Azure Functions slutpunkter under api vägen. Routningsregler kan konfigureras via routePrefix i filen host.json.

  • Konfiguration och konventioner: En Functions-app använder filen function.json för att definiera HTTP-verb, definiera säkerhetsprinciper och kan konfigurera funktionens indata och utdata. Som standard definierar mappnamnet som innehåller funktionsfilerna slutpunktsnamnet, men du kan ändra namnet via route egenskapen i filen function.json .

Exempel

Express.js

I följande exempel visas en typisk Express.js GET slutpunkt.

// 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}`);
  }
});

När en GET begäran skickas till /helloreturneras ett HTTP 200 svar som innehåller Success . Om slutpunkten stöter på ett fel är svaret ett HTTP 500 med felinformationen.

Azure Functions

Azure Functions ordnar konfigurations- och kodfiler i en enda mapp för varje funktion. Som standard avgör namnet på mappen funktionsnamnet.

En funktion med namnet hello har till exempel en mapp med följande filer.

| - hello
|  - function.json
|  - index.js

I följande exempel implementeras samma resultat som ovanstående Express.js slutpunkt, men med 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}`
    };
  }
};

När du flyttar till Functions görs följande ändringar:

  • Modul: Funktionskoden implementeras som en JavaScript-modul.

  • Kontext- och svarsobjekt: context Med kan du kommunicera med funktionens körning. Från kontexten kan du läsa begärandedata och ange funktionens svar. Synkron kod kräver att du anropar 1.x context.done() för att slutföra körningen, medan 2.x+ async -funktioner löser begäran implicit.

  • Namngivningskonvention: Mappnamnet som används för att innehålla Azure Functions filer används som slutpunktsnamn som standard (detta kan åsidosättas i function.json).

  • Konfiguration: Du definierar HTTP-verben i filen function.json , till exempel POST eller PUT.

Följande function.json-fil innehåller konfigurationsinformation för funktionen.

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["get"]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ]
}

Genom att get definiera i matrisen methods är funktionen tillgänglig för HTTP-begäranden GET . Om du vill att api:et ska acceptera supportbegäranden POST kan du även lägga till post i matrisen.

Nästa steg