Azure İşlevleri için Node.js programlama modelinin 4. sürümüne geçiş
Bu makalede, Node.js programlama modelinin sürüm 3 ile sürüm 4 arasındaki farklar ve mevcut bir v3 uygulamasının nasıl yükseltılacağı açıklanır. Mevcut bir v3 uygulamasını yükseltmek yerine yeni bir v4 uygulaması oluşturmak istiyorsanız Visual Studio Code (VS Code) veya Azure İşlevleri Core Tools öğreticisine bakın. Bu makalede, uygulamanızı yükseltmek için gerçekleştirmeniz gereken en önemli somut eylemleri vurgulamak için "ipucu" uyarıları kullanılır.
Sürüm 4, Node.js geliştiricilere aşağıdaki avantajları sağlayacak şekilde tasarlanmıştır:
- geliştiricilere tanıdık ve sezgisel bir deneyim Node.js.
- Tam özelleştirme desteğiyle dosya yapısını esnek hale getirin.
- İşlev yapılandırmasını tanımlamak için kod odaklı bir yaklaşıma geçin.
Dikkat edilmesi gereken noktalar
- Node.js programlama modeli Azure İşlevleri çalışma zamanıyla karıştırılmamalıdır:
- Programlama modeli: Kodunuzu nasıl yazdığınızı tanımlar ve JavaScript ve TypeScript'e özgüdür.
- Çalışma zamanı: Azure İşlevleri temel davranışını tanımlar ve tüm dillerde paylaşılır.
- Programlama modelinin sürümü kesinlikle npm paketinin sürümüne
@azure/functions
bağlıdır. Çalışma zamanından bağımsız olarak sürümlenmiştir. Hem çalışma zamanı hem de programlama modeli en son ana sürümü olarak 4 sayısını kullanır, ancak bu bir tesadüftür. - Aynı işlev uygulamasında v3 ve v4 programlama modellerini karıştıramazsınız. Uygulamanıza bir v4 işlevi kaydettiğiniz anda, function.json dosyalarında kayıtlı tüm v3 işlevleri yoksayılır.
Gereksinimler
Node.js programlama modelinin 4. sürümü aşağıdaki en düşük sürümleri gerektirir:
@azure/functions
npm paketi v4.0.0- v18+ Node.js
- Azure İşlevleri Runtime v4.25+
- Azure İşlevleri Core Tools v4.0.5382+ (yerel olarak çalışıyorsa)
@azure/functions
npm paketi v4.0.0- v18+ Node.js
- TypeScript v4+
- Azure İşlevleri Runtime v4.25+
- Azure İşlevleri Core Tools v4.0.5382+ (yerel olarak çalışıyorsa)
npm paketini dahil et
v4'te npm paketi, @azure/functions
Node.js programlama modelini destekleyen birincil kaynak kodunu içerir. Önceki sürümlerde bu kod doğrudan Azure'da gönderildi ve npm paketinde yalnızca TypeScript türleri vardı. Şimdi bu paketi hem TypeScript hem de JavaScript uygulamaları için eklemeniz gerekir. Mevcut v3 uygulamaları için paketi ekleyebilirsiniz, ancak bu gerekli değildir.
İpucu
Paketin package.json dosyanızın bölümünde (değildevDependencies
) listelendiğinden dependencies
emin olun.@azure/functions
Aşağıdaki komutu kullanarak v4'ü yükleyebilirsiniz:
npm install @azure/functions
Uygulama giriş noktanızı ayarlama
Programlama modelinin v4'lerinde kodunuzu istediğiniz gibi yapılandırabilirsiniz. Uygulamanızın kökünde ihtiyacınız olan tek dosyalar host.json ve package.json.
Aksi takdirde, package.json dosyanızdaki alanı ayarlayarak main
dosya yapısını tanımlarsınız. Glob deseni main
kullanarak alanı tek bir dosyaya veya birden çok dosyaya ayarlayabilirsiniz. Aşağıdaki tabloda alan için örnek değerler gösterilmektedir main
:
Örnek | Açıklama |
---|---|
src/index.js |
İşlevleri tek bir kök dosyadan kaydedin. |
src/functions/*.js |
Her işlevi kendi dosyasından kaydedin. |
src/{index.js,functions/*.js} |
Her işlevi kendi dosyasından kaydettiğiniz, ancak yine de genel uygulama düzeyinde kod için bir kök dosyanız olduğu bir birleşim. |
Örnek | Açıklama |
---|---|
dist/src/index.js |
İşlevleri tek bir kök dosyadan kaydedin. |
dist/src/functions/*.js |
Her işlevi kendi dosyasından kaydedin. |
dist/src/{index.js,functions/*.js} |
Her işlevi kendi dosyasından kaydettiğiniz, ancak yine de genel uygulama düzeyinde kod için bir kök dosyanız olduğu bir birleşim. |
İpucu
package.json dosyanızda bir main
alan tanımladığınızdan emin olun.
Bağımsız değişkenlerin sırasını değiştirme
Çağırma bağlamı yerine tetikleyici girişi artık işlev işleyicinizin ilk bağımsız değişkenidir. Artık ikinci bağımsız değişken olan çağırma bağlamı v4'te basitleştirilmiştir ve tetikleyici girişi olarak gerekli değildir. Kullanmıyorsanız kapalı bırakabilirsiniz.
İpucu
Bağımsız değişkenlerinizin sırasını değiştirin. Örneğin, HTTP tetikleyicisi kullanıyorsanız veya bağlamı (request)
kullanmıyorsanız öğesine geçin.(request, context)
(context, request)
İşlevinizi kodda tanımlama
Artık bu ayrı function.json yapılandırma dosyalarını oluşturmanız ve korumanız gerekmez. Artık işlevlerinizi doğrudan TypeScript veya JavaScript dosyalarınızda tam olarak tanımlayabilirsiniz. Buna ek olarak, artık birçok özelliğin varsayılan değerleri vardır, böylece bunları her seferinde belirtmeniz gerekmez.
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,
});
İpucu
yapılandırmayı function.json dosyanızdan kodunuzla taşıyın. Tetikleyicinin türü, yeni modeldeki nesnedeki app
bir yönteme karşılık gelir. Örneğin, function.json'de bir httpTrigger
tür kullanıyorsanız, işlevi kaydetmek için kodunuzu çağırınapp.http()
. kullanıyorsanız timerTrigger
çağrısında bulunur app.timer()
.
Bağlam kullanımınızı gözden geçirin
v4'te nesne, context
yinelemeyi azaltmak ve birim testleri yazmayı kolaylaştırmak için basitleştirilmiştir. Örneğin, birincil girişi ve çıkışı yalnızca işlev işleyicinizin bağımsız değişkeni ve dönüş değeri olarak erişilebilecek şekilde kolaylaştırdık.
Nesnedeki context
birincil giriş ve çıkışa artık erişemezsiniz, ancak nesnedeki context
ikincil girişlere ve çıkışlara erişmeye devam etmeniz gerekir. İkincil girişler ve çıkışlar hakkında daha fazla bilgi için Node.js geliştirici kılavuzuna bakın.
Birincil girişi bağımsız değişken olarak alma
Birincil giriş tetikleyici olarak da adlandırılır ve tek gerekli giriş veya çıkıştır. Bir (ve yalnızca bir) tetikleyiciniz olmalıdır.
Sürüm 4, ilk bağımsız değişken olarak tetikleyici girişini almanın yalnızca bir yolunu destekler:
async function httpTrigger1(request, context) {
const onlyOption = request;
async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const onlyOption = request;
İpucu
Girişi almak için veya context.bindings
kullanmadığınızdan context.req
emin olun.
Birincil çıkışı dönüş değeriniz olarak ayarlayın
Sürüm 4, birincil çıkışı dönüş değeri aracılığıyla ayarlamanın tek bir yolunu destekler:
return {
body: `Hello, ${name}!`
};
async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
// ...
return {
body: `Hello, ${name}!`
};
}
İpucu
Çıktıyı nesneyle ayarlamak yerine her zaman işlev işleyicinizde döndürdiğinizden context
emin olun.
Bağlam günlüğü
v4'te, aşağıdaki örnekte gösterildiği gibi günlük yöntemleri kök context
nesneye taşındı. Günlüğe kaydetme hakkında daha fazla bilgi için Node.js geliştirici kılavuzuna bakın.
context.log('This is an info log');
context.error('This is an error');
context.warn('This is an error');
Test bağlamı oluşturma
Sürüm 3, Azure İşlevleri çalışma zamanı dışında bir çağrı bağlamı oluşturmayı desteklemez, bu nedenle birim testleri yazmak zor olabilir. Sürüm 4, siz eklemediğiniz sürece testler sırasındaki bilgiler ayrıntılı olmasa da çağırma bağlamının bir örneğini oluşturmanıza olanak tanır.
const testInvocationContext = new InvocationContext({
functionName: 'testFunctionName',
invocationId: 'testInvocationId'
});
HTTP türleri kullanımınızı gözden geçirin
HTTP isteği ve yanıt türleri artık getirme standardının bir alt kümesidir. Bunlar artık Azure İşlevleri için benzersiz değildir.
Türler paketi Node.js kullanır undici
. Bu paket, getirme standardına uyar ve şu anda Node.js çekirdekle tümleştiriliyor .
HttpRequest
Gövde. Gövdeye erişmek için almak istediğiniz türe özgü bir yöntem kullanabilirsiniz:
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();
Üst Bilgi:
const header = request.headers.get('content-type');
Sorgu parametresi:
const name = request.query.get('name');
HttpResponse
Durum:
return { status: 200 };
Gövde:
body
veyaBuffer
gibistring
çoğu türü döndürmek için özelliğini kullanın:return { body: "Hello, world!" };
jsonBody
JSON yanıtı döndürmenin en kolay yolu için özelliğini kullanın:return { jsonBody: { hello: "world" } };
Üst bilgi. Sınıfı mı
HttpResponseInit
yoksa arabirimi mi kullandığınızaHttpResponse
bağlı olarak üst bilgiyi iki şekilde ayarlayabilirsiniz:const response = new HttpResponse(); response.headers.set('content-type', 'application/json'); return response;
return { headers: { 'content-type': 'application/json' } };
İpucu
HTTP isteğini veya yanıt türlerini kullanarak tüm mantığı yeni yöntemlerle eşleşecek şekilde güncelleştirin.
İpucu
HTTP isteğini veya yanıt türlerini kullanarak tüm mantığı yeni yöntemlerle eşleşecek şekilde güncelleştirin. Eski yöntemleri kullanıp kullanmadığınızı belirlemenize yardımcı olması için TypeScript derleme hataları almanız gerekir.