全部产品
Search
文档中心

Function Compute:Penanganan

更新时间:Jul 06, 2025

Anda dapat menggunakan penangan Node.js untuk menanggapi peristiwa yang diterima dan mengeksekusi logika bisnis yang sesuai. Topik ini menjelaskan konsep dan struktur penangan Node.js serta menyediakan contoh-contohnya.

Apa itu penangan?

Penangan suatu fungsi di Function Compute adalah metode yang digunakan untuk memproses permintaan dalam kode fungsi. Saat sebuah fungsi dipanggil, Function Compute menggunakan penangan yang Anda konfigurasikan untuk memproses permintaan. Anda dapat mengonfigurasi penangan untuk sebuah fungsi dengan menentukan parameter Handler di Konsol Function Compute.

Penangan fungsi Node.js di Function Compute mengikuti format NamaFile.NamaMetode. Sebagai contoh, jika nama file Anda adalah index.js atau index.mjs dan nama metode Anda adalah handler, maka penanganannya adalah index.handler.

Untuk informasi lebih lanjut tentang fungsi-fungsi Function Compute dan operasi terkaitnya, lihat Buat Fungsi Acara.

Konfigurasi penangan harus sesuai dengan spesifikasi konfigurasi Function Compute. Spesifikasi konfigurasi bervariasi berdasarkan jenis penangan.

Tanda tangan Penangan

Catatan

Modul ECMAScript didukung oleh Function Compute di Node.js 18 dan versi selanjutnya. Untuk Node.js 16 dan versi sebelumnya, Function Compute hanya mendukung modul CommonJS. Untuk informasi lebih lanjut, lihat Tentukan Modul ECMAScript sebagai Penangan.

Kode sampel berikut menunjukkan tanda tangan penangan acara sederhana:

Node.js 18 atau Node.js 20

Modul ECMAScript

Catatan

Kode sampel mendukung penerapan satu klik. Anda dapat menerapkan kode sampel di Function Compute dengan satu klik. 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');
};

Deskripsi Parameter:

handler menunjukkan nama metode, yang sesuai dengan nilai parameter Handler yang dikonfigurasikan di Konsol Function Compute. Sebagai contoh, jika Anda menyetel Handler ke index.handler saat membuat fungsi, Function Compute memuat metode handler yang didefinisikan di index.js dan mulai mengeksekusi kode dari handler tersebut.

Function Compute runtime melewati parameter permintaan ke penangan. Parameter pertama adalah objek event, yang berisi informasi payload permintaan. Objek event adalah tipe data Buffer. Anda dapat mengonversi event ke 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 Anda menggunakan Async/Await daripada callback di runtime Node.js 18 atau yang lebih baru.

    • Function Compute mengubah hasil yang dikembalikan berdasarkan tipe nilai yang dikembalikan.

      • Tipe Buffer: Hasilnya langsung dikembalikan tanpa perubahan.

      • Tipe Objek: Hasilnya dikembalikan dalam format JSON.

      • Tipe lainnya: Hasilnya dikembalikan sebagai string.

Async/Await

Kami merekomendasikan Anda menggunakan Async/Await di runtime Node.js 18 atau yang lebih baru. Async/Await adalah cara yang sederhana dan mudah dibaca untuk menulis kode asinkron di Node.js tanpa callback bersarang atau penggabungan metode.

Penting

Jika Anda menggunakan Node.js 16 atau versi sebelumnya, Anda harus secara eksplisit menggunakan callback untuk mengirim respons. Jika tidak, akan terjadi kesalahan timeout permintaan.

Dibandingkan dengan callback, Async/Await memberikan manfaat berikut:

  • Keterbacaan yang Lebih Baik: Kode dalam mode Async/Await lebih linier dan sinkron, serta lebih mudah dipahami dan dipelihara. Async/Await 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 dengan mudah dilacak dan ditelusuri.

  • Efisiensi yang Lebih Tinggi: Dalam banyak kasus, fungsi callback harus beralih 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 melewatkan parameter berformat JSON ke fungsi Function Compute, Function Compute melewati parameter tersebut, dan Anda perlu mengurai parameter dalam kode. Kode sampel berikut memberikan contoh cara mengurai event yang dalam format JSON.

Modul ECMAScript

Catatan

Contoh ini hanya mendukung 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 sampel mendukung penerapan satu klik. Anda dapat menerapkan kode sampel di Function Compute dengan satu klik. start-fc3-nodejs-json

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 Acara. Jika Anda ingin menentukan kode sebagai modul ECMAScript, Anda harus memilih Node.js 18 atau Node.js 20 sebagai runtime saat membuat fungsi.

Procedure

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. Pada halaman detail fungsi, klik tab Code. Di editor kode, masukkan kode sampel di atas dan klik Deploy.

    Catatan

    Pada kode sampel di atas, penangan fungsi adalah metode handler di index.js. Jika penangan fungsi Anda berbeda, gunakan konfigurasi penangan aktual.

  4. Pada tab Code, klik ikon image.png di sebelah Test Function, pilih Configure Test Parameters dari daftar drop-down, masukkan parameter uji sampel berikut, lalu klik OK.

    {
      "key": "value"
    }
  5. Klik Test Function pada tab Kode.

    Setelah fungsi dieksekusi, hasil eksekusi dikembalikan. Dalam contoh ini, value dikembalikan.

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). Kode berikut digunakan sebagai contoh:

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 {
      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 Parameter:

  • context.credentials: mendapatkan pasangan AccessKey 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 untuk diunggah.

  • return "put object": mengembalikan "put object" jika unggahan berhasil.

  • throw err: melempar pengecualian jika unggahan gagal.

Modul CommonJS

Catatan

Kode sampel mendukung penerapan satu klik. Anda dapat menerapkan kode sampel di Function Compute 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 Parameter:

  • context.credentials: mendapatkan pasangan AccessKey sementara dari parameter context. Ini membantu mencegah hard-coding informasi sensitif seperti kata sandi dalam kode.

  • myObj: nama objek OSS.

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

  • callback(null, 'put object'): mengembalikan put object jika unggahan berhasil.

  • callback(err): mengembalikan err jika unggahan gagal.

Before you start

Procedure

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. (Opsional) Pada halaman Function Details, klik tab Code. Di bagian bawah halaman WebIDE, pilih Terminal > New Terminal. Kemudian, jalankan perintah berikut untuk menginstal dependensi ali-oss:

    npm install ali-oss --save

    Setelah instalasi selesai, Anda dapat melihat bahwa folder node_modules dihasilkan di direktori kode di sisi kiri WebIDE. Folder tersebut berisi direktori ali-oss dan pustaka dependen lainnya.

  4. Pada halaman Function Details, klik tab Code. Di editor kode, masukkan kode sampel di atas, simpan kode, lalu klik Deploy.

    Catatan
    • Pada kode sampel di atas, penangan untuk fungsi adalah metode handler di index.js atau index.mjs. Jika penangan fungsi Anda berbeda, gunakan konfigurasi penangan aktual.

    • Ganti region dan bucket dalam kode sampel di atas dengan nilai aktual.

  5. Klik Test Function.

    Setelah fungsi dieksekusi, hasil eksekusi dikembalikan. Dalam contoh ini, put object dikembalikan.

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 di Linux dan menampilkan daftar file dalam direktori saat ini. Contoh kode:

Modul ECMAScript

Catatan

Contoh ini hanya mendukung Node.js 18 atau 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 sampel mendukung penerapan satu klik. Anda dapat menerapkan kode sampel di Function Compute 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: Gunakan pemicu HTTP untuk memanggil fungsi

Kode sampel

Anda dapat menggunakan URL yang disediakan oleh pemicu HTTP untuk memanggil fungsi di Function Compute. Kode sampel berikut menunjukkan sebuah contoh:

  • Jika parameter Authentication Method dari pemicu HTTP diatur ke No Authentication, Anda dapat menggunakan Postman atau curl untuk memanggil fungsi tersebut. Untuk informasi lebih lanjut, lihat Prosedur.

  • Jika parameter Authentication Method dari pemicu HTTP diatur ke Signature Authentication atau JWT Authentication, Anda dapat menggunakan metode tanda tangan atau metode otentikasi JWT untuk memanggil fungsi tersebut. Untuk informasi lebih lanjut, lihat Otentikasi.

Untuk informasi lebih lanjut tentang format payload permintaan dan payload respons dari pemicu HTTP, lihat Gunakan Pemicu HTTP untuk Memanggil Fungsi.

Modul ECMAScript

Catatan

Contoh ini hanya mendukung 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!';
  // dapatkan badan permintaan http
  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 sampel mendukung penerapan satu klik. Anda dapat menerapkan kode sampel di Function Compute 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!';
  // dapatkan badan permintaan http
  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

Anda telah menggunakan kode sampel di atas untuk membuat fungsi dalam runtime Node.js dan membuat pemicu HTTP untuk fungsi tersebut. Untuk informasi lebih lanjut, lihat Buat Fungsi Acara dan Konfigurasikan Pemicu HTTP. Jika Anda ingin menentukan kode sebagai modul ECMAScript, Anda harus memilih Node.js 18 atau Node.js 20 sebagai runtime saat membuat fungsi.

Prosedur

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. Pada halaman detail fungsi, klik tab Konfigurasi. Di panel navigasi kiri, klik Trigger. Pada halaman Pemicu, peroleh titik akhir publik dari pemicu HTTP.

  4. Jalankan perintah berikut menggunakan 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 yang diperoleh.

    Hasil 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!curl: (3) URL using bad/illegal format or missing URL

Contoh 5: Gunakan pemicu HTTP untuk mengunduh file

Kode sampel

Jika Anda ingin mengembalikan gambar, paket terkompresi, atau file biner menggunakan kode, Anda dapat menggunakan pemicu HTTP. Kode sampel berikut memberikan sebuah contoh:

Modul ECMAScript

Catatan

Contoh ini hanya mendukung 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

Anda telah menggunakan kode sampel di atas untuk membuat fungsi dalam runtime Node.js dan membuat pemicu HTTP untuk fungsi tersebut. Untuk informasi lebih lanjut, lihat Buat Fungsi Acara dan Konfigurasikan Pemicu HTTP. Jika Anda ingin menentukan kode sebagai modul ECMAScript, Anda harus memilih Node.js 18 atau Node.js 20 sebagai runtime saat membuat fungsi.

Prosedur

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

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang ingin Anda kelola.

  3. Pada halaman detail fungsi, klik tab Code. Di halaman yang muncul, klik Terminal > New Terminal untuk membuka jendela terminal. Jalankan perintah npm install mime@2 untuk menginstal pustaka mime. Setelah instalasi selesai, klik Deploy.

    image

  4. Pada tab Triggers halaman konfigurasi fungsi, salin nilai dari Public Endpoint dari pemicu HTTP, tempelkan titik akhir publik di browser, lalu tekan Enter.

    image

    Setelah itu, fungsi dieksekusi dan file diunduh ke mesin lokal Anda.