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 viaroutePrefix
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 .
Tips
Läs mer i den interaktiva självstudien Refactor Node.js och Express-API:er till serverlösa API:er med Azure Functions.
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 /hello
returneras 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.xcontext.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
ellerPUT
.
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
- Läs mer med den interaktiva självstudien Refactor Node.js och Express-API:er till serverlösa API:er med Azure Functions