All Products
Search
Document Center

Function Compute:Penanganan error

Last Updated:Sep 10, 2026

Function Compute menangkap error yang dilemparkan oleh fungsi Node.js Anda dan mengembalikan respons terstruktur. Halaman ini mencakup dua kategori error yang dapat dihasilkan oleh fungsi Node.js serta cara menafsirkan kode status HTTP dari layanan tersebut.

Jenis error

Pengecualian yang ditangkap

Ketika fungsi Anda melemparkan pengecualian, Function Compute menangkapnya dan mengembalikan objek JSON dengan tiga bidang:

Bidang Deskripsi
errorMessage String pesan error
errorType Nama kelas error JavaScript
stackTrace Array berisi frame stack

Modul ECMAScript

Sintaksis modul ECMAScript memerlukan Node.js 18 atau versi lebih baru. Kode contoh mendukung penerapan satu klik (nodejs-fc-err-es).
export const handler = async (event, context) => {
  throw new Error('oops');
};

Modul CommonJS

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

Contoh respons:

{
    "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)"
    ]
}

Keluar tidak normal

Jika fungsi Anda memanggil process.exit() saat berjalan, runtime tidak dapat menangkap error terstruktur. Layanan tersebut malah mengembalikan pesan umum:

Modul ECMAScript

Sintaksis modul ECMAScript memerlukan Node.js 18 atau versi lebih baru.
export const handler = async (event, context) => {
  process.exit(1);
};

Modul CommonJS

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

Contoh respons:

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

Kode status HTTP

Penting

Respons 2xx tidak menjamin keberhasilan fungsi. Periksa header respons X-Fc-Error-Type untuk mendeteksi error fungsi yang dikembalikan dengan kode status 2xx.

Ketika pemanggilan fungsi gagal, Function Compute mengembalikan kode status HTTP, badan respons, dan — untuk error tingkat fungsi — header respons X-Fc-Error-Type. Periksa sinyal-sinyal ini untuk menangani error dalam kode atau menampilkannya kepada pengguna akhir.

Kode status Makna
2xx Function Compute menerima permintaan. Jika respons menyertakan header X-Fc-Error-Type, berarti terjadi error fungsi — misalnya, pengecualian yang tidak ditangkap dalam kode Anda.
4xx (kecuali 429) Klien yang memulai pemanggilan mengirim permintaan tidak valid.
429 Permintaan dibatasi lajunya (throttled).
5xx Terjadi error internal di Function Compute, konfigurasi fungsi tidak valid, atau terdapat masalah sumber daya.

Untuk informasi lebih lanjut tentang error pemanggilan, lihat Konfigurasikan mekanisme retry.

FAQ

require tidak didefinisikan dalam cakupan modul ES

Gejala

Ketika file entri fungsi Node.js dimuat sebagai modul ES (ekstensi file adalah .mjs, atau package.json menetapkan "type": "module") dan kode menggunakan require() untuk memuat modul, pemanggilan mengembalikan kode status HTTP 200, header respons menyertakan X-Fc-Error-Type: InvocationError, dan badan respons berisi error berikut:

{
    "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)"
    ]
}

Konten error bervariasi tergantung pada jenis file entri dan lokasi pemanggilan require():

  • Jika file entri memiliki ekstensi .js dan package.json menetapkan "type": "module", errorMessage menyertakan baris tambahan: 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.

  • Jika require() dipanggil di dalam fungsi handler dan bukan di tingkat atas modul, errorMessage berisi require is not defined.

Penyebab

require() adalah fungsi pemuatan sistem modul CommonJS dan tidak tersedia dalam cakupan modul ES. Setelah sebuah file diidentifikasi sebagai modul ES, Node.js tidak menyisipkan variabel CommonJS seperti require, module, dan exports.

Solusi

Pilih salah satu metode berikut berdasarkan struktur kode Anda:

  • Tulis ulang require() menjadi pernyataan import modul ES. Untuk memuat modul secara dinamis, gunakan ekspresi import().

  • Untuk mempertahankan sintaksis require(), ubah ekstensi file entri menjadi .cjs. Tidak diperlukan perubahan pada konfigurasi handler fungsi.

Contoh berikut menunjukkan penulisan ulang dengan modul ES (file entri index.mjs):

// Impor modul bawaan Node.js dan file modul ES lokal
import { createHash } from 'node:crypto';
import { helper } from './utils.mjs';

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

Contoh berikut menunjukkan cara memuat modul secara dinamis:

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

Contoh berikut menunjukkan sintaksis CommonJS (file entri index.cjs):

const crypto = require('crypto');

exports.handler = async (event, context) => {
  return crypto.createHash('sha256').digest('hex');
};
Catatan: Untuk memuat dependensi pihak ketiga (seperti lodash), jalankan npm install secara lokal terlebih dahulu, lalu kemas dan terapkan direktori node_modules bersama kode Anda. Dalam modul ES, Anda dapat mereferensikan dependensi CommonJS dengan menggunakan impor default, misalnya, import _ from 'lodash';.

Modul ES hanya didukung pada runtime Node.js 18 dan versi lebih baru. Pada runtime Node.js 16 dan versi sebelumnya, file entri .mjs tidak dimuat, dan pemanggilan mengembalikan "errorMessage": "Module '/code/index.js' is missing." dan "errorType": "FunctionUnhandledError: ImportModuleError".