Tüm Ürünler
Search
Belge Merkezi

Function Compute:Hata yönetimi

Son Güncelleme:Oct 08, 2026

Function Compute, Node.js işlevinizin oluşturduğu hataları yakalar ve yapılandırılmış bir yanıt döndürür. Bu konuda, Node.js işlevlerinin üretebileceği iki hata kategorisi ve hizmetten gelen HTTP durum kodlarının nasıl yorumlanacağı açıklanmaktadır.

Hata türleri

Yakalanan özel durumlar

İşleviniz bir özel durum oluşturduğunda Function Compute bunu yakalar ve üç alan içeren bir JSON nesnesi döndürür:

Alan Açıklama
errorMessage Hata mesajı dizesi
errorType JavaScript hata sınıfı adı
stackTrace Yığın çerçevelerinden oluşan bir dizi

ECMAScript modülleri

ECMAScript modül sözdizimi Node.js 18 veya sonraki sürümleri gerektirir. Örnek kod tek tıkla dağıtımı destekler ( nodejs-fc-err-es ).
export const handler = async (event, context) => {
  throw new Error('oops');
};

CommonJS modülleri

exports.handler = function(event, context, callback) {
  throw new Error('oops');
};

Örnek yanıt:

{
    "errorMessage": "oops",
    "errorType": "Error",
    "stackTrace": [
        "Error: oops",
        "    at handler (file:///code/index.mjs:2:9)",
        "    at module.exports (file:///var/fc/runtime/nodejs20/bootstrap.mjs:5655:14)",
        "    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
    ]
}

Anormal çıkışlar

İşleviniz çalışırken process.exit() çağrısı yaparsa çalışma zamanı yapılandırılmış bir hatayı yakalayamaz. Hizmet bunun yerine genel bir mesaj döndürür:

ECMAScript modülleri

ECMAScript modül sözdizimi Node.js 18 veya sonraki sürümleri gerektirir.
export const handler = async (event, context) => {
  process.exit(1);
};

CommonJS modülleri

exports.handler = function(event, context, callback) {
  process.exit(1);
};

Örnek yanıt:

{
    "errorMessage": "Process exited unexpectedly before completing request (duration: 12ms, maxMemoryUsage: 0MB)"
}

HTTP durum kodları

Önemli

2xx yanıtı, işlevin başarıyla tamamlandığını garanti etmez. İşlev hatalarını tespit etmek için X-Fc-Error-Type yanıt üst bilgisini kontrol edin; bu hatalar 2xx durum koduyla döndürülebilir.

Bir işlev çağrısı başarısız olduğunda Function Compute bir HTTP durum kodu, bir yanıt gövdesi ve işlev düzeyindeki hatalar için bir X-Fc-Error-Type yanıt üst bilgisi döndürür. Kodunuzdaki hataları işlemek veya son kullanıcılara sunmak amacıyla bu sinyalleri inceleyin.

Durum kodu Anlamı
2xx Function Compute isteği aldı. Yanıt X-Fc-Error-Type üst bilgisini içeriyorsa bir işlev hatası oluşmuş demektir; örneğin, kodunuzda yakalanmamış bir özel durum.
4xx (429 hariç) Çağrıyı başlatan istemci geçersiz bir istek gönderdi.
429 İstek kısıtlandı (throttled).
5xx Function Compute içinde dahili bir hata oluştu, işlev yapılandırması geçersiz veya bir kaynak sorunu mevcut.

Çağrı hataları hakkında daha fazla bilgi için bkz. Yeniden deneme mekanizması yapılandırma.

SSS

ES modülü kapsamında require tanımlı değil

Belirti

Node.js işlevinin giriş dosyası bir ES modülü olarak yüklendiğinde (dosya uzantısı .mjs ise veya package.json içinde "type": "module" ayarlanmışsa) ve kod modülleri yüklemek için require() kullanıyorsa çağrı HTTP durum kodu 200 ile döner, yanıt üst bilgilerinde X-Fc-Error-Type: InvocationError bulunur ve yanıt gövdesi aşağıdaki hatayı içerir:

{
    "errorMessage": "require is not defined in ES module scope, you can use import instead",
    "errorType": "ReferenceError",
    "stackTrace": [
        "ReferenceError: require is not defined in ES module scope, you can use import instead",
        "    at file:///code/index.mjs:1:15",
        "    at ModuleJob.run (node:internal/modules/esm/module_job:218:25)"
    ]
}

Hata içeriği, giriş dosyası türüne ve require() konumuna bağlı olarak değişir:

  • Giriş dosyasının uzantısı .js ise ve package.json içinde "type": "module" ayarlıysa errorMessage ek bir satır içerir: This file is being treated as an ES module because it has a '.js' file extension and '/code/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.

  • require() modülün üst düzeyinde değil de işlev işleyicisi içinde çağrılıyorsa errorMessage değeri require is not defined olur.

Neden

require() CommonJS modül sisteminin yükleme işlevidir ve ES modülü kapsamında kullanılamaz. Bir dosya ES modülü olarak tanımlandığında Node.js require, module ve exports gibi CommonJS değişkenlerini enjekte etmez.

Çözüm

Kod yapınıza göre aşağıdaki yöntemlerden birini seçin:

  • require() ifadelerini ES modülü import ifadeleri olarak yeniden yazın. Bir modülü dinamik olarak yüklemek için import() ifadesini kullanın.

  • require() sözdizimini korumak için giriş dosyasının uzantısını .cjs olarak değiştirin. İşlev işleyici yapılandırmasında değişiklik gerekmez.

Aşağıdaki örnek, ES modülü yeniden yazımını gösterir (giriş dosyası index.mjs):

// Import a Node.js built-in module and a local ES module file
import { createHash } from 'node:crypto';
import { helper } from './utils.mjs';

export const handler = async (event, context) => {
  return createHash('sha256').update(helper()).digest('hex');
};

Aşağıdaki örnek, bir modülün dinamik olarak nasıl yükleneceğini gösterir:

const crypto = await import('node:crypto');

Aşağıdaki örnek, CommonJS sözdizimini gösterir (giriş dosyası index.cjs):

const crypto = require('crypto');

exports.handler = async (event, context) => {
  return crypto.createHash('sha256').digest('hex');
};
Not: Üçüncü taraf bir bağımlılığı (örneğin lodash ) yüklemek için öncelikle yerel ortamda npm install komutunu çalıştırın ve ardından node_modules dizinini kodunuzla birlikte paketleyip dağıtın. ES modüllerinde, varsayılan içe aktarma kullanarak bir CommonJS bağımlılığına başvurabilirsiniz; örneğin, import _ from 'lodash'; .

ES modülleri yalnızca Node.js 18 ve sonraki sürüm çalışma zamanlarında desteklenir. Node.js 16 ve önceki sürüm çalışma zamanlarında .mjs giriş dosyası yüklenmez ve çağrı "errorMessage": "Module '/code/index.js' is missing." ile "errorType": "FunctionUnhandledError: ImportModuleError" değerlerini döndürür.