Megosztás a következőn keresztül:


Migrálás az Azure Functions Node.js programozási modelljének 4. verziójára

Ez a cikk a Node.js programozási modell 3. és 4. verziója közötti különbségeket, valamint a meglévő v3-alkalmazások frissítésének módját ismerteti. Ha egy meglévő v3-alkalmazás frissítése helyett új v4-alkalmazást szeretne létrehozni, tekintse meg a Visual Studio Code (VS Code) vagy az Azure Functions Core Tools oktatóanyagát. Ez a cikk "tipp" riasztásokkal emeli ki az alkalmazás frissítése során végrehajtandó legfontosabb konkrét műveleteket. A 4-es verzió úgy lett kialakítva, hogy Node.js fejlesztők számára a következő előnyöket nyújtsuk:

  • Biztosítson ismerős és intuitív élményt Node.js fejlesztőknek.
  • A fájlstruktúra rugalmassá tétele a teljes testreszabás támogatásával.
  • Váltson kódközpontú megközelítésre a függvénykonfiguráció definiálásához.

Megfontolások

  • A Node.js programozási modellt nem szabad összekeverni az Azure Functions-futtatókörnyezettel:
    • Programozási modell: Meghatározza a kód készítésének módját, és a JavaScriptre és a TypeScriptre jellemző.
    • Futtatókörnyezet: Meghatározza az Azure Functions mögöttes viselkedését, és minden nyelven meg van osztva.
  • A programozási modell verziója szigorúan az npm-csomag verziójához @azure/functions van kötve. A futtatókörnyezettől függetlenül verziószámozott. A futtatókörnyezet és a programozási modell is a 4-es számot használja a legújabb főverzióként, de ez véletlen.
  • A v3- és v4-programozási modellek nem keverhetők ugyanabban a függvényalkalmazásban. Amint regisztrál egy v4-függvényt az alkalmazásban, a function.json fájlokban regisztrált v3-függvények figyelmen kívül lesznek hagyva.

Követelmények

A Node.js programozási modell 4. verziójához a következő minimális verziók szükségesek:

Az npm-csomag belefoglalása

A v4-ben az @azure/functions npm-csomag tartalmazza az elsődleges forráskódot, amely a Node.js programozási modellt tartalmazza. A korábbi verziókban a közvetlenül az Azure-ban szállított kód és az npm-csomag csak TypeScript-típusok voltak. Ezt a csomagot mostantól TypeScript- és JavaScript-alkalmazásokhoz is tartalmaznia kell. A csomagot meglévő v3-alkalmazásokhoz is felveheti, de nem szükséges.

Tipp.

Győződjön meg arról, hogy a @azure/functions csomag szerepel a dependencies package.json fájl (nemdevDependencies) szakaszában. A v4-et a következő paranccsal telepítheti:

npm install @azure/functions

Az alkalmazás belépési pontának beállítása

A programozási modell v4-ben tetszés szerint strukturálhatja a kódot. Az alkalmazás gyökerében csak host.json és package.json fájlokra van szüksége.

Ellenkező esetben a fájlstruktúrát a package.json fájl mezőjének beállításával main határozhatja meg. A mezőt egy gömbmintávalmainállíthatja be. Az alábbi táblázat a mezőhöz tartozó main példaértékeket mutatja be:

Példa Leírás
src/index.js Függvények regisztrálása egyetlen gyökérfájlból.
src/functions/*.js Regisztrálja az egyes függvényeket a saját fájljából.
src/{index.js,functions/*.js} Olyan kombináció, amelyben az egyes függvényeket a saját fájljából regisztrálja, de az általános alkalmazásszintű kódhoz továbbra is rendelkezik gyökérfájllal.
Példa Leírás
dist/src/index.js Függvények regisztrálása egyetlen gyökérfájlból.
dist/src/functions/*.js Regisztrálja az egyes függvényeket a saját fájljából.
dist/src/{index.js,functions/*.js} Olyan kombináció, amelyben az egyes függvényeket a saját fájljából regisztrálja, de az általános alkalmazásszintű kódhoz továbbra is rendelkezik gyökérfájllal.

Tipp.

Ügyeljen arra, hogy a package.jsonmainadjon meg egy mezőt.

Az argumentumok sorrendjének váltása

Az eseményindító bemenete a meghívási környezet helyett most a függvénykezelő első argumentuma. A meghívási környezet, amely most a második argumentum, a v4-ben egyszerűsítve van, és nem olyan szükséges, mint az eseményindító bemenete. Ha nem használja, kikapcsolhatja.

Tipp.

Váltsa át az argumentumok sorrendjét. Ha például HTTP-eseményindítót használ, váltson (context, request) vagy (request, context) csak (request) akkor, ha nem használja a környezetet.

Függvény definiálása kódban

Ezeket a különálló function.json konfigurációs fájlokat már nem kell létrehoznia és fenntartania. Mostantól teljes mértékben definiálhatja a függvényeket közvetlenül a TypeScript- vagy JavaScript-fájlokban. Emellett számos tulajdonságnak van alapértelmezett értéke, így nem kell minden alkalommal megadnia őket.

const { app } = require('@azure/functions');

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: async (request, context) => {
        context.log(`Http function processed request for url "${request.url}"`);

        const name = request.query.get('name') || (await request.text()) || 'world';

        return { body: `Hello, ${name}!` };
    },
});
import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || (await request.text()) || 'world';

    return { body: `Hello, ${name}!` };
}

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: httpTrigger1,
});

Tipp.

Helyezze át a konfigurációt a function.json fájlból a kódba. Az eseményindító típusa megfelel az új modell objektumának app egy metódusának. Ha például egy típust httpTrigger használ a function.json, hívja meg app.http() a kódot a függvény regisztrálásához. Ha használja timerTrigger, hívja meg a következőt app.timer():

A környezet használatának áttekintése

A v4-ben az objektum egyszerűbbé teszi a context duplikációt, és egyszerűbbé teszi az egységtesztek írását. Leegyszerűsítettük például az elsődleges bemenetet és kimenetet, hogy csak a függvénykezelő argumentumaként és visszatérési értékeként legyenek elérhetők.

Az objektum elsődleges bemenete és kimenete context már nem érhető el, de továbbra is hozzá kell férnie az objektum másodlagoscontext. További információ a másodlagos bemenetekről és kimenetekről: Node.js fejlesztői útmutató.

Az elsődleges bemenet lekérése argumentumként

Az elsődleges bemenetet eseményindítónak is nevezik, és ez az egyetlen szükséges bemenet vagy kimenet. Egy (és csak egy) eseményindítóval kell rendelkeznie.

A 4-es verzió csak egyféleképpen támogatja az eseményindító bemenetének lekérését az első argumentumként:

async function httpTrigger1(request, context) {
  const onlyOption = request;
async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
  const onlyOption = request;

Tipp.

Győződjön meg arról, hogy nem használja context.req a bemenetet, vagy context.bindings nem szeretné lekérni a bemenetet.

Az elsődleges kimenet beállítása visszatérési értékként

A 4-es verzió csak egy módon támogatja az elsődleges kimenet beállítását a visszatérési értéken keresztül:

return { 
  body: `Hello, ${name}!` 
};
async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    // ...
    return { 
      body: `Hello, ${name}!` 
    };
}

Tipp.

Győződjön meg arról, hogy mindig a függvénykezelőben adja vissza a kimenetet, ahelyett, hogy az context objektummal állítja be.

Környezet naplózása

A v4-ben a naplózási metódusok át lettek helyezve a gyökérobjektumba context az alábbi példában látható módon. A naplózással kapcsolatos további információkért tekintse meg a Node.js fejlesztői útmutatót.

context.log('This is an info log');
context.error('This is an error');
context.warn('This is an error');

Tesztkörnyezet létrehozása

A 3. verzió nem támogatja a meghívási környezet létrehozását az Azure Functions-futtatókörnyezeten kívül, így az egységtesztek készítése nehézkes lehet. A 4-es verzió lehetővé teszi a meghívási környezet egy példányának létrehozását, bár a tesztek során lévő információk csak akkor lesznek részletesek, ha ön adja hozzá.

const testInvocationContext = new InvocationContext({
  functionName: 'testFunctionName',
  invocationId: 'testInvocationId'
});

HTTP-típusok használatának áttekintése

A HTTP-kérés- és választípusok mostantól a beolvasási szabvány részhalmazai. Már nem egyediek az Azure Functionsben.

A típusok a csomagot Node.js undici használják. Ez a csomag a beolvasási szabványt követi, és jelenleg Node.js magba van integrálva .

HttpRequest

  • Test. A törzset a kapni kívánt típusnak megfelelő metódussal érheti el:

    const body = await request.text();
    const body = await request.json();
    const body = await request.formData();
    const body = await request.arrayBuffer();
    const body = await request.blob();
    
  • Fejléc:

    const header = request.headers.get('content-type');
    
  • Lekérdezési paraméter:

    const name = request.query.get('name');
    

HttpResponse

  • Állapot:

    return { status: 200 };
    
  • Törzs:

    A tulajdonság használatával adja vissza a body legtöbb típust, például a string vagy Buffer:

    return { body: "Hello, world!" };
    

    jsonBody A JSON-válasz visszaadásának legegyszerűbb módja a tulajdonság használata:

    return { jsonBody: { hello: "world" } };
    
  • Fejléc. A fejléc kétféleképpen állítható be attól függően, hogy az osztályt vagy a HttpResponseHttpResponseInit felületet használja-e:

    const response = new HttpResponse();
    response.headers.set('content-type', 'application/json');
    return response;
    
    return {
      headers: { 'content-type': 'application/json' }
    };
    

Tipp.

Frissítse a logikát a HTTP-kérések vagy választípusok használatával, hogy megfeleljenek az új módszereknek.

Tipp.

Frissítse a logikát a HTTP-kérések vagy választípusok használatával, hogy megfeleljenek az új módszereknek. TypeScript buildelési hibákat kell kapnia, amelyek segítenek azonosítani, hogy régi metódusokat használ-e.

Hibaelhárítás

Tekintse meg a Node.js hibaelhárítási útmutatót.