全部产品
Search
文档中心

Function Compute:Penangan Peristiwa

更新时间:Jul 02, 2025

Bagian ini menjelaskan karakteristik struktural dari penangan peristiwa serta memberikan contoh penggunaannya dalam Node.js.

Signature Penangan Peristiwa

Catatan

Modul ECMAScript didukung oleh Function Compute pada Node.js 18 ke atas. Untuk Node.js 16 dan versi sebelumnya, Function Compute hanya mendukung modul CommonJS. Untuk informasi lebih lanjut, lihat Tentukan modul ECMAScript sebagai handler.

Berikut adalah contoh signature untuk penangan peristiwa:

Node.js 18 dan yang lebih baru

Modul ECMAScript

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

Modul CommonJS

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

Node.js 16 dan yang lebih lama

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

Deskripsi parameter:

handler mengacu pada nama metode yang sesuai dengan nilai parameter Handler yang dikonfigurasi di Konsol Function Compute. Sebagai contoh, jika Anda mengatur Handler menjadi index.handler saat membuat fungsi, Function Compute akan memuat fungsi handler yang didefinisikan di index.js dan mulai menjalankan kode.

Function Compute runtime melewatkan parameter permintaan ke handler. Parameter pertama adalah objek event, yang berisi informasi payload permintaan. Objek event bertipe Buffer. Anda dapat mengubahnya menjadi tipe objek lain berdasarkan kebutuhan bisnis Anda. Parameter kedua adalah objek context yang menyediakan informasi konteks selama pemanggilan. Untuk informasi lebih lanjut, lihat Context.

Catatan
  • Kami merekomendasikan penggunaan Async/Await dibandingkan callback jika Anda menggunakan Node.js 18 atau yang lebih baru.

  • Function Compute mengonversi hasil berdasarkan jenis nilai yang dikembalikan.

    • Tipe Buffer: Hasil dikembalikan tanpa konversi.

    • Tipe Objek: Hasil dikonversi ke format JSON.

    • Tipe lainnya: Hasil dikembalikan sebagai string.

Async/Await

Kami merekomendasikan penggunaan Async/Await pada Node.js 18 atau yang lebih baru. Async/Await merupakan cara sederhana dan mudah dibaca untuk menulis kode asinkron tanpa callback bersarang atau penggabungan metode.

Penting

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

Dibandingkan dengan callback, Async/Await memiliki beberapa keunggulan berikut:

  • Keterbacaan yang lebih baik: Kode dalam mode Async/Await lebih linier dan sinkron, sehingga lebih mudah dipahami dan dipelihara. Ini juga mencegah sarang tingkat tinggi dan membuat struktur kode lebih jelas.

  • Mudah untuk debugging dan menangani kesalahan: Anda dapat menggunakan blok try-catch untuk menangkap dan menangani kesalahan dalam operasi asinkron dengan lebih mudah. Stack kesalahan dapat dilacak dan ditelusuri dengan lebih efektif.

  • Efisiensi yang lebih tinggi: Dalam banyak kasus, fungsi callback memerlukan pergantian antara bagian-bagian kode yang berbeda. Async/Await dapat mengurangi jumlah pergantian konteks, sehingga meningkatkan efisiensi kode.

Contoh 1: Mengurai parameter berformat JSON

Sample code

Saat Anda melewati parameter berformat JSON ke fungsi Function Compute, Function Compute meneruskan parameter tersebut, dan Anda perlu mengurai parameter dalam kode. Berikut adalah contoh cara mengurai peristiwa berformat JSON.

Modul ECMAScript

Catatan

Contoh ini hanya mendukung Node.js 18 atau yang lebih baru.

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

Modul CommonJS

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

Prerequisites

Fungsi Node.js telah dibuat. Untuk informasi lebih lanjut, lihat Buat fungsi. Jika Anda ingin menentukan kode sebagai modul ECMAScript, pilih Node.js 18 atau Node.js 20 sebagai runtime saat membuat fungsi.

Procedure

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik nama fungsi yang diinginkan. Pada halaman Detail Fungsi yang muncul, klik tab Code.

  4. Pada tab Code, masukkan kode sampel di atas di editor kode dan klik Deploy.

    Catatan

    Pada kode sampel di atas, handler adalah metode handler di index.js atau index.mjs. Jika Anda menentukan handler yang berbeda, gunakan file dan metode aktual.

  5. Pada tab Code, klik ikon down di sebelah Test Function, pilih Configure Test Parameters dari daftar drop-down, konfigurasikan parameter uji berikut, lalu klik OK.

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

    Setelah fungsi dieksekusi, hasil eksekusi dikembalikan. Hasil eksekusi adalah value.

Contoh 2: Membaca dan menulis sumber daya OSS menggunakan pasangan AccessKey sementara

Sample code

Anda dapat menggunakan pasangan AccessKey sementara yang disediakan oleh Function Compute untuk mengakses Object Storage Service (OSS). Bagian ini menyertakan kode sampel.

Modul ECMAScript

Catatan

Contoh ini hanya mendukung 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 {
      // Unggah objek ke OSS. object menunjukkan nama objek di OSS. localfile menunjukkan jalur file lokal.
      const uploadResult = await ossClient.put('myObj', Buffer.from('hello, fc', "utf-8"));
      console.log('upload berhasil, ', uploadResult);
      return "succ"
    } catch (error) {
      throw error
    }
};

Berikut adalah deskripsi parameter:

  • context.credentials: Mendapatkan kunci sementara dari parameter konteks. Ini membantu mencegah hard-coding informasi sensitif seperti kata sandi dalam kode.

  • myObj: Nama objek OSS.

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

  • return "succ": Mengembalikan succ jika unggah berhasil.

  • throw err: Melempar pengecualian jika unggah gagal.

Modul CommonJS

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-cn-shenzhen',
        bucket: 'my-bucket',
    });

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

Berikut adalah deskripsi parameter:

  • context.credentials: Mendapatkan kunci sementara dari parameter konteks untuk menghindari hard-coding informasi sensitif seperti kata sandi dalam kode.

  • myObj: Nama objek OSS.

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

  • callback(null, 'put object'): Mengembalikan succ jika unggah berhasil.

  • callback(err): Mengembalikan Err jika unggah gagal.

Prerequisites

Procedure

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik nama fungsi yang diinginkan. Pada halaman Detail Fungsi yang muncul, klik tab Code.

  4. Opsional. Pada tab Code, klik WebIDE di bagian bawah halaman. Pada halaman WebIDE, klik Terminal > New Terminal. Jalankan perintah berikut untuk menginstal dependensi ali-oss di terminal:

    npm install ali-oss --save

    Setelah instalasi selesai, folder node_modules akan muncul di direktori kode di sisi kiri WebIDE. Folder tersebut berisi direktori ali-oss dan pustaka dependen lainnya.

  5. Pada tab Code, masukkan kode sampel di atas di editor kode, simpan kode, lalu klik Deploy.

    Catatan
    • Request handler dari fungsi dalam kode sampel di atas adalah metode handler di index.js atau index.mjs. Jika Anda menentukan handler yang berbeda, gunakan file dan metode aktual.

    • Dalam kode sampel di atas, tentukan region dan bucket berdasarkan nilai aktual.

  6. Klik Test Function.

    Setelah fungsi dieksekusi, hasil eksekusi dikembalikan. Hasil eksekusi adalah succ.

Contoh 3: Memanggil perintah eksternal

Anda dapat menggunakan program Node.js untuk membuat proses fork guna memanggil perintah eksternal. Sebagai contoh, Anda dapat menggunakan modul child_process untuk memanggil perintah ls -l. Setelah memanggil perintah tersebut, file di direktori saat ini akan dikembalikan. Bagian ini menyertakan kode sampel.

Modul ECMAScript

Catatan

Contoh ini hanya mendukung Node.js 18 atau yang lebih baru.

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

'use strict';

var exec = require('child_process').exec;
exports.handler = (event, context, callback) => {
  console.log('mulai mengeksekusi perintah');
  exec("ls -l", function(error, stdout, stderr){
    callback(null, stdout);
});
}