All Products
Search
Document Center

Function Compute:Handler

Last Updated:Apr 24, 2026

Anda dapat menggunakan handler Node.js untuk merespons event dan menjalankan logika bisnis. Topik ini menjelaskan konsep dan struktur handler Node.js serta menyediakan contoh.

Apa itu handler?

Handler untuk fungsi FC adalah metode dalam kode fungsi Anda yang memproses permintaan. Ketika fungsi FC Anda dipanggil, Function Compute menjalankan handler yang dikonfigurasi untuk memproses permintaan tersebut. Anda dapat mengonfigurasi handler di Function Compute console menggunakan parameter Handler.

Untuk fungsi FC berbasis Node.js, format handlernya adalah filename.methodName. Misalnya, jika file Anda bernama index.js atau index.mjs dan metodenya bernama handler, maka handlernya adalah index.handler.

Untuk informasi lebih lanjut tentang fungsi FC dan operasi terkait, lihat Buat fungsi yang dipicu oleh event.

Konfigurasi handler harus sesuai dengan spesifikasi konfigurasi Function Compute. Spesifikasi konfigurasi bervariasi tergantung pada jenis handler.

Tanda tangan handler

Catatan

Function Compute mendukung modul ECMAScript (ES) mulai dari runtime Node.js 18. Sebelum itu (pada Node.js 16 dan versi sebelumnya), Function Compute hanya mendukung modul CommonJS. Untuk informasi lebih lanjut, lihat Tentukan handler sebagai modul ES.

Handler event sederhana memiliki tanda tangan berikut:

Node.js 18 atau Node.js 20

Modul ES

Catatan

Kode contoh ini mendukung penerapan satu klik. Anda dapat menerapkan kode ini langsung di Function Compute (FC).start-fc3-nodejs-es

// index.mjs
export const handler = async (event, context) => {
  console.log("receive event: \n" + event);
  return "Hello World!";
};

Modul CommonJS

// index.js
exports.handler = async function(event, context) {
  console.log("receive event: \n" + event);
  return "Hello World!";
};

Node.js 16 dan sebelumnya

// index.js
exports.handler = async function(event, context, callback) {
  console.log("event: \n" + event);
  callback(null, 'hello world');
};

Kode contoh di atas dijelaskan sebagai berikut:

handler adalah nama metode, yang sesuai dengan Handler yang dikonfigurasi di Function Compute console. Misalnya, jika Anda menentukan index.handler sebagai Handler saat membuat fungsi, Function Compute akan memuat fungsi handler yang didefinisikan dalam file index.js dan memulai eksekusi.

Lingkungan runtime Function Compute meneruskan parameter permintaan ke handler permintaan. Parameter pertama adalah objek event, yang berisi muatan permintaan. Objek event bertipe Buffer, dan Anda dapat mengonversinya ke tipe objek yang Anda butuhkan. Parameter kedua adalah objek context, yang menyediakan informasi konteks runtime untuk pemanggilan tersebut. Untuk informasi lebih lanjut, lihat Context.

    Catatan
    • Saat menggunakan runtime Node.js 18 atau yang lebih baru, gunakan fitur Async/Await alih-alih callback.

    • Function Compute mengonversi hasil yang dikembalikan berdasarkan tipenya.

      • Tipe Buffer: Dikembalikan apa adanya.

      • Tipe Objek: Dikonversi ke format JSON dan dikembalikan.

      • Tipe lainnya: Dikonversi ke string dan dikembalikan.

Async/Await

Saat Anda menggunakan lingkungan runtime Node.js 18 atau yang lebih baru, kami menyarankan agar Anda menggunakan pendekatan Async/Await. Async/Await merupakan cara ringkas dan mudah dibaca untuk menulis kode asinkron di Node.js yang menghindari callback bersarang atau pemanggilan berantai.

Penting

Jika Anda menggunakan runtime Node.js 16 atau yang lebih lama, Anda harus secara eksplisit menggunakan metode callback untuk mengirim respons. Jika tidak, permintaan akan timeout.

Pendekatan Async/Await memiliki keunggulan berikut dibandingkan fungsi callback callback:

  • Peningkatan keterbacaan: Kode yang menggunakan async/await lebih linear dan sinkron. Hal ini membuat kode lebih mudah dipahami dan dipelihara. Pendekatan ini menghindari callback yang bersarang dalam, sehingga menghasilkan struktur kode yang lebih jelas.

  • Debugging dan penanganan error yang lebih sederhana: Anda dapat menggunakan blok try-catch untuk lebih mudah menangkap dan menangani error dalam operasi asinkron. Stack error lebih jelas, sehingga memudahkan Anda melacak sumber error secara akurat.

  • Efisiensi lebih tinggi: Callback sering kali memerlukan perpindahan antar bagian kode yang berbeda. Pendekatan async/await mengurangi jumlah pergantian konteks, sehingga meningkatkan efisiensi kode.

Contoh 1: Mengurai parameter berformat JSON

Kode contoh

Function Compute meneruskan parameter berformat JSON langsung ke fungsi Anda. Anda harus mengurai parameter tersebut dalam kode Anda. Kode berikut menunjukkan cara mengurai event berformat JSON.

Modul ES

Catatan

Contoh ini hanya didukung pada runtime Node.js 18 dan yang lebih baru.

export const handler = async (event, context) => {
  var eventObj = JSON.parse(event.toString());
  return eventObj['key'];
};

Modul CommonJS

Catatan

Kode contoh ini mendukung penerapan satu klik. Anda dapat menerapkan kode ini ke Function Compute (FC) dengan satu klik.start-fc3-nodejs-json

exports.handler = function(event, context, callback) {
  var eventObj = JSON.parse(event.toString());
  callback(null, eventObj['key']);
};

Prasyarat

Buat fungsi Node.js. Untuk informasi lebih lanjut, lihat Buat fungsi yang dipicu oleh event. Jika Anda ingin menentukan kode Anda sebagai modul ES, pilih Node.js 18 atau Node.js 20 sebagai runtime saat membuat fungsi.

Prosedur

  1. Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.

  3. Di halaman konfigurasi fungsi, pilih tab Code. Di editor kode, masukkan kode contoh di atas lalu klik Deploy.

    Catatan

    Handler untuk fungsi dalam kode contoh di atas adalah metode handler dalam file index.js. Jika handler fungsi Anda dikonfigurasi berbeda, perbarui file dan metode yang sesuai.

  4. Di tab Code, klik ikon image.png di sebelah kanan Test Function. Dari daftar drop-down, pilih Configure Test Parameters. Masukkan parameter uji contoh berikut lalu klik OK.

    {
      "key": "value"
    }
  5. Klik Test Function.

    Setelah fungsi berhasil dijalankan, periksa responsnya. Responsnya adalah value.

Contoh 2: Membaca dan menulis sumber daya OSS secara aman menggunakan Pasangan Kunci Akses temporary

Kode contoh

Gunakan Pasangan Kunci Akses temporary yang disediakan oleh Function Compute untuk mengakses Object Storage Service (OSS). Kode berikut merupakan contohnya.

Modul ES

Catatan

Contoh ini hanya berjalan pada runtime Node.js 18 atau yang lebih baru.

// index.mjs
import OSSClient from 'ali-oss';

export const handler = async (event, context) => {
    console.log(event.toString());

    var ossClient = new OSSClient({
        accessKeyId: context.credentials.accessKeyId,
        accessKeySecret: context.credentials.accessKeySecret,
        stsToken: context.credentials.securityToken,
        region: 'oss-cn-shenzhen',
        bucket: 'my-bucket',
    });

    try {
      const uploadResult = await ossClient.put('myObj', Buffer.from('hello, fc', "utf-8"));
      console.log('upload success, ', uploadResult);
      return "put object"
    } catch (error) {
      throw error
    }
};

Deskripsi kode:

  • context.credentials: Mendapatkan Pasangan Kunci Akses temporary dari parameter context. Hal ini menghindari hardcoding informasi sensitif seperti kata sandi dalam kode.

  • myObj: Nama objek OSS.

  • Buffer.from('hello, fc', "utf-8"): Konten objek yang akan diunggah.

  • return "put object": Jika unggahan berhasil, put object dikembalikan.

  • throw err: Jika unggahan gagal, exception dilemparkan.

Modul CommonJS

Catatan

Kode contoh ini mendukung penerapan satu klik. Terapkan kode ini ke Function Compute (FC) dengan satu klik.start-fc3-nodejs-oss

var OSSClient = require('ali-oss');

exports.handler = function (event, context, callback) {
    console.log(event.toString());

    var ossClient = new OSSClient({
        accessKeyId: context.credentials.accessKeyId,
        accessKeySecret: context.credentials.accessKeySecret,
        stsToken: context.credentials.securityToken,
        region: `oss-${context.region}`,
    		bucket: process.env.BUCKET_NAME,
    });

    ossClient.put('myObj', Buffer.from('hello, fc', "utf-8")).then(function (res) {
        callback(null, 'put object');
    }).catch(function (err) {
        callback(err);
    });  
};

Deskripsi kode:

  • context.credentials: Mendapatkan Pasangan Kunci Akses temporary dari parameter context. Hal ini menghindari hardcoding informasi sensitif seperti kata sandi dalam kode.

  • myObj: Nama objek OSS.

  • Buffer.from('hello, fc', "utf-8"): Konten objek yang akan diunggah.

  • callback(null, 'put object'): Jika unggahan berhasil, put object dikembalikan.

  • callback(err): Jika unggahan gagal, err dikembalikan.

Prasyarat

Prosedur

  1. Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.

  3. (Opsional) Di tab Function Details fungsi, klik tab Code. Di bagian WebIDE, pilih untuk membuka terminal. Lalu, jalankan perintah berikut untuk menginstal dependensi ali-oss.

    npm install ali-oss --save

    Setelah instalasi selesai, folder node_modules akan dibuat di direktori kode di sisi kiri WebIDE. Folder tersebut berisi direktori ali-oss dan library dependensi lainnya.

  4. Di tab Function Details fungsi, klik tab Code. Di editor kode, masukkan kode contoh yang disediakan di atas. Lalu, simpan kode dan klik Deploy.

    Catatan
    • Dalam kode contoh, handler fungsi adalah metode handler dalam file index.js atau index.mjs. Jika fungsi Anda menggunakan handler yang berbeda, perbarui file dan metode yang sesuai.

    • Dalam kode contoh, Anda harus mengatur region dan bucket sesuai kebutuhan Anda.

  5. Klik Test Function.

    Setelah fungsi dieksekusi, lihat hasil yang dikembalikan. Hasilnya adalah put object.

Contoh 3: Memanggil perintah eksternal

Program Node.js juga dapat membuat proses fork untuk memanggil perintah eksternal. Misalnya, Anda dapat menggunakan modul child_process untuk memanggil perintah Linux ls -l dan mencantumkan file di direktori saat ini. Kode berikut memberikan contohnya.

Modul ES

Catatan

Contoh ini hanya berjalan pada runtime Node.js 18 dan yang lebih baru.

'use strict';

import { exec } from 'child_process';
import { promisify } from 'util';

const execPromisify = promisify(exec);
export const handler = async (event, context) => {
  try {
    const { stdout, stderr } = await execPromisify("ls -l");
    console.log(`stdout: ${stdout}`);
    if (stderr !== "") {
      console.error(`stderr: ${stderr}`);
    }
    return stdout;
  } catch (error) {
    console.error(`exec error: ${error}`);
    return error;
  }
}

Modul CommonJS

Catatan

Kode ini mendukung penerapan satu klik. Anda dapat menerapkan kode ini ke Function Compute (FC) dengan satu klik.start-fc3-nodejs-exec

'use strict';

var exec = require('child_process').exec;
exports.handler = (event, context, callback) => {
  console.log('start to execute a command');
  exec("ls -l", function(error, stdout, stderr){
    callback(null, stdout);
});
}

Contoh 4: Memanggil fungsi menggunakan pemicu HTTP

Kode contoh

Gunakan URL yang disediakan oleh pemicu HTTP untuk memanggil fungsi. Kode berikut merupakan contohnya.

  • Jika Authentication Method untuk pemicu HTTP diatur ke No Authentication, gunakan Postman atau perintah curl untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Prosedur.

  • Jika Authentication Method untuk pemicu HTTP diatur ke Signature Authentication, JWT authentication atau Bearer authentication, gunakan metode autentikasi yang sesuai untuk memanggil fungsi. Untuk informasi lebih lanjut, lihat Authentication.

Untuk informasi tentang format muatan permintaan dan respons untuk panggilan yang dilakukan oleh pemicu HTTP, lihat Panggil fungsi menggunakan pemicu HTTP.

Modul ES

Catatan

Contoh ini hanya didukung pada runtime Node.js 18 atau yang lebih baru.

'use strict';

export const handler = async (event, context) => {
  const eventObj = JSON.parse(event);
  console.log(`receive event: ${JSON.stringify(eventObj)}`);

  let body = 'Hello World!';
  // get http request body
  if ("body" in eventObj) {
    body = eventObj.body;
    if (eventObj.isBase64Encoded) {
      body = Buffer.from(body, 'base64').toString('utf-8');
    }
  }
  console.log(`receive http body: ${body}`);

  return {
    'statusCode': 200,
    'body': body
  };
}

Modul CommonJS

Catatan

Kode contoh ini mendukung penerapan satu klik. Anda dapat menerapkan kode ini ke Function Compute (FC) dengan satu klik.start-fc3-nodejs-http

'use strict';
exports.handler = (event, context, callback) => {
  const eventObj = JSON.parse(event);
  console.log(`receive event: ${JSON.stringify(eventObj)}`);

  let body = 'Hello World!';
  // get http request body
  if ("body" in eventObj) {
    body = eventObj.body;
    if (eventObj.isBase64Encoded) {
      body = Buffer.from(body, 'base64').toString('utf-8');
    }
  }
  console.log(`receive http body: ${body}`);

  callback(null, {
    'statusCode': 200,
    'body': body
  });
}

Prasyarat

Fungsi yang menggunakan runtime Node.js dan pemicu HTTP telah dibuat berdasarkan contoh sebelumnya. Untuk informasi lebih lanjut, lihat Buat fungsi yang dipicu oleh event dan Konfigurasikan pemicu HTTP. Jika Anda ingin menentukan kode sebagai modul ES, pilih Node.js 18 atau Node.js 20 untuk runtime saat membuat fungsi.

Prosedur

  1. Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.

  3. Di halaman detail fungsi, klik tab Triggers. Di halaman Triggers, dapatkan titik akhir publik dari pemicu HTTP.

  4. Jalankan perintah berikut di tool curl untuk memanggil fungsi.

    curl -i "https://test-nodejs-dlgxxr****.cn-shanghai.fcapp.run" -d 'Hello World!'

    Dalam perintah di atas, https://test-nodejs-dlgxxr****.cn-shanghai.fcapp.run adalah titik akhir publik dari pemicu HTTP.

    Respons berikut dikembalikan.

    HTTP/1.1 200 OK
    Access-Control-Expose-Headers: Date,x-fc-request-id
    Content-Disposition: attachment
    Content-Length: 12
    Content-Type: text/html; charset=utf-8
    Etag: W/"c-Lve95gjOVATpfV8EL5X4nxwjKHE"
    X-Fc-Request-Id: 1-65d866a8-15d8796a-cb9b4feb69ca
    X-Powered-By: Express
    Date: Fri, 23 Feb 2024 09:34:34 GMT
    
    Hello World!

Contoh 5: Gunakan pemicu HTTP untuk mengunduh file

Kode contoh

Untuk mengembalikan gambar, paket terkompresi, atau file biner dari kode Anda, gunakan pemicu HTTP. Kode berikut memberikan contohnya.

Modul ES

Catatan

Contoh ini hanya didukung pada runtime Node.js 18 atau yang lebih baru.

// index.mjs
'use strict';

import mime from 'mime';
import fs from 'fs/promises';
import path from 'path'; 

export const handler = async (event, context) => {
    const fileContent = 'This is a sample text file created in the code.';
    const fileName = 'sample.txt';
    const filePath = path.join('/tmp', fileName);
    
    try {
        await fs.writeFile(filePath, fileContent);
        
        const mimeType = mime.getType(filePath);
        if (!mimeType) {
            throw new Error('Unable to determine MIME type');
        }
        
        const fileData = await fs.readFile(filePath);
        const fileBase64 = Buffer.from(fileData).toString('base64');
        
        const fcResponse = {
            'statusCode': 200,
            'headers': {
                'Content-Type': mimeType,
                'Content-Disposition': `attachment; filename="${fileName}"`,
            },
            'body': fileBase64,
            'isBase64Encoded': true
        };
        
        console.log('File generated and fetched successfully.');
        return fcResponse;
    } catch (err) {
        console.error(err);
        return {
            'statusCode': 500,
            'body': err.message
        };
    }
};

Modul CommonJS

// index.js
'use strict';
const mime = require('mime');
const fs = require('fs');
const path = require('path');

exports.handler = async (event, context, callback) => {

    const fileContent = 'This is a sample text file created in the code.';
    const fileName = 'sample.txt';
    const filePath = path.join('/tmp', fileName);
    try {
        fs.writeFileSync(filePath, fileContent);

        const mimeType = mime.getType(filePath);
        if (!mimeType) {
            throw new Error('Unable to determine MIME type');
        }

        const fileData = fs.readFileSync(filePath);
        const fileBase64 = Buffer.from(fileData).toString('base64');

        const fcResponse = {
            'statusCode': 200,
            'headers': {
                'Content-Type': mimeType,
                'Content-Disposition': `attachment; filename="${fileName}"`,
            },
            'body': fileBase64,
            'isBase64Encoded': true
        };

        console.log('File generated and fetched successfully.');
        callback(null, fcResponse);
    } catch (err) {
        console.error(err);
        callback(null, {
            'statusCode': 500,
            'body': err.message
        });
    }
};

Prasyarat

Buat fungsi yang menggunakan runtime Node.js dan pemicu HTTP berdasarkan contoh sebelumnya. Untuk informasi lebih lanjut, lihat Buat fungsi yang dipicu oleh event dan Konfigurasikan pemicu HTTP. Jika Anda ingin menentukan kode sebagai modul ES, atur runtime ke Node.js 18 atau Node.js 20 saat membuat fungsi.

Prosedur

  1. Masuk ke Function Compute console. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.

  3. Di halaman detail fungsi, klik tab Code, lalu pilih untuk membuka jendela terminal. Jalankan perintah npm install mime@2 untuk menginstal library mime. Setelah instalasi selesai, klik Deploy.

  4. Di tab Trigger fungsi, dapatkan Internet Endpoint dari pemicu HTTP. Salin URL tersebut ke browser Anda dan tekan Enter.

    Setelah Anda menekan Enter, fungsi akan dipicu. Jika fungsi berhasil dijalankan, file akan diunduh ke mesin lokal Anda.