Kembali ke Blog

Tutorial n8n #7: Transformasi Data Sederhana dengan Code Node

Panduan praktis memakai Code node di n8n untuk transformasi data kecil, seperti membuat full_name dan amount_label dari data JSON sederhana.

•
Frendi Triarista
Tutorial n8n #7: Transformasi Data Sederhana dengan Code Node

Tutorial n8n #7: Transformasi Data Sederhana dengan Code Node

Di tutorial sebelumnya, kita sudah membahas dasar trigger, mapping, condition, request, webhook, dan merge. Pada bagian ketujuh ini, kita mulai memakai Code node untuk transformasi data sederhana.

Saya sengaja membatasi contoh ini pada transformasi kecil. Code node memang memberi kontrol lebih besar saat mapping visual tidak cukup, tetapi bukan berarti seluruh logika aplikasi perlu dipindahkan ke workflow. Kode pendek lebih mudah dibaca, diuji, dan diaudit.

Workflow yang akan kita buat:

Manual Trigger -> Edit Fields -> Code -> Edit Fields

Kapan cukup pakai Edit Fields, kapan perlu Code node?

Gunakan Edit Fields jika transformasinya masih sederhana dan jelas secara visual, misalnya:

  • Mengganti nama field.
  • Menambahkan field statis.
  • Mengambil nilai dari field lain dengan expression.
  • Menyusun teks pendek dari beberapa field.

Gunakan Code node jika mulai butuh logika kecil yang lebih nyaman ditulis sebagai kode, misalnya:

  • Menggabungkan beberapa field dengan fallback.
  • Membersihkan teks sebelum dipakai.
  • Membuat label dari angka.
  • Menjalankan kondisi kecil yang sulit dibaca jika dipaksakan menjadi expression panjang.

Prinsip saya: kalau expression sudah mulai panjang dan sulit dicek, pindahkan ke Code node. Tapi tetap jaga agar kodenya kecil.

Prasyarat

Sebelum mulai, pastikan:

  1. n8n sudah berjalan.
  2. Anda sudah memahami JSON item dan expression dasar.
  3. Tidak perlu credential eksternal untuk tutorial ini.

1. Buat workflow baru

Buat workflow baru dengan urutan node berikut:

  1. Manual Trigger
  2. Edit Fields
  3. Code
  4. Edit Fields

Manual Trigger akan dipakai untuk menjalankan workflow secara manual. Node pertama Edit Fields dipakai untuk membuat data contoh. Code node dipakai untuk transformasi. Node terakhir Edit Fields dipakai untuk merapikan output.

2. Buat data contoh di Edit Fields

Tambahkan node Edit Fields setelah Manual Trigger.

Buat field berikut:

Field Value
first_name Budi
last_name Santoso
amount 125000

Expected result dari node ini adalah satu item JSON seperti berikut:

{
  "first_name": "Budi",
  "last_name": "Santoso",
  "amount": 125000
}

Di n8n, data antar node dikirim sebagai item. Untuk data JSON biasa, bentuk amannya adalah object yang memiliki key json.

Contoh struktur item di balik layar:

{
  "json": {
    "first_name": "Budi",
    "last_name": "Santoso",
    "amount": 125000
  }
}

3. Tambahkan Code node

Tambahkan Code node setelah Edit Fields.

Untuk tutorial ini, gunakan mode:

Run Once for All Items

Mode ini menjalankan kode satu kali untuk semua item yang masuk. Ini cocok untuk contoh transformasi sederhana karena kita bisa mengambil semua input dengan $input.all(), lalu mengembalikan array item baru.

Isi Code node dengan kode berikut:

const items = $input.all();

return items.map((item) => {
  const data = item.json;

  const firstName = data.first_name ?? '';
  const lastName = data.last_name ?? '';
  const amount = Number(data.amount ?? 0);

  const fullName = `${firstName} ${lastName}`.trim();
  const amountLabel = Number.isFinite(amount)
    ? `Rp ${amount.toLocaleString('id-ID')}`
    : 'Rp 0';

  return {
    json: {
      ...data,
      full_name: fullName,
      amount_label: amountLabel,
    },
  };
});

Kode ini melakukan dua transformasi:

  1. Membuat full_name dari first_name dan last_name.
  2. Membuat amount_label dari amount, misalnya Rp 125.000.

4. Memahami $json, item, dan output object

Di n8n, satu data yang lewat antar node disebut item. Untuk data JSON, item biasanya berbentuk:

{
  "json": {
    "field": "value"
  }
}

Pada mode Run Once for All Items, kita mengambil semua item dengan:

const items = $input.all();

Setiap item memiliki property json, sehingga kita membaca data seperti ini:

const data = item.json;
const firstName = data.first_name;

Output yang aman dikembalikan dari Code node adalah array item, dan setiap item memiliki key json:

return [
  {
    json: {
      full_name: 'Budi Santoso'
    }
  }
];

Jika memakai mode Run Once for Each Item, pola kodenya bisa lebih pendek karena $json merujuk ke JSON item saat ini:

const firstName = $json.first_name ?? '';
const lastName = $json.last_name ?? '';

return {
  json: {
    ...$json,
    full_name: `${firstName} ${lastName}`.trim(),
  },
};

Untuk tutorial ini, kita tetap memakai Run Once for All Items agar lebih jelas melihat bentuk array input dan output.

5. Rapikan output dengan Edit Fields terakhir

Tambahkan node Edit Fields setelah Code node.

Gunakan node ini untuk menampilkan field yang ingin dilanjutkan ke node berikutnya, misalnya:

Field Value dari input
first_name {{ $json.first_name }}
last_name {{ $json.last_name }}
full_name {{ $json.full_name }}
amount {{ $json.amount }}
amount_label {{ $json.amount_label }}

Node terakhir ini tidak wajib untuk logika transformasi, tetapi berguna agar output workflow lebih rapi dan mudah diperiksa.

6. Uji workflow

Jalankan workflow dari Manual Trigger.

Expected result setelah Code node:

{
  "first_name": "Budi",
  "last_name": "Santoso",
  "amount": 125000,
  "full_name": "Budi Santoso",
  "amount_label": "Rp 125.000"
}

Jika hasilnya seperti di atas, transformasi sederhana dengan Code node sudah berhasil.

Kesalahan umum yang perlu dicek

1. Field undefined

Masalah ini biasanya terjadi karena nama field tidak sama dengan input.

Contoh salah:

data.firstname

Padahal field yang dibuat adalah:

data.first_name

Gunakan nama field yang sama persis. Jika field mungkin kosong, pakai fallback seperti:

const firstName = data.first_name ?? '';

2. Output bukan object yang benar

Code node perlu mengembalikan struktur yang bisa dibaca n8n. Untuk mode Run Once for All Items, kembalikan array item:

return [
  {
    json: {
      message: 'ok'
    }
  }
];

Hindari mengembalikan string mentah seperti ini:

return 'ok';

Struktur seperti itu tidak cocok untuk alur data n8n.

3. Lupa mempertahankan data lama

Jika Anda hanya mengembalikan field baru, field lama akan hilang.

Contoh:

return {
  json: {
    full_name: fullName
  }
};

Jika ingin tetap membawa field lama, gunakan spread:

return {
  json: {
    ...data,
    full_name: fullName
  }
};

4. Menaruh secret di dalam kode

Jangan menaruh API key, token, password, atau data sensitif langsung di Code node. Kode workflow lebih mudah terlihat oleh orang yang punya akses ke n8n. Untuk kebutuhan credential, gunakan mekanisme credential yang disediakan n8n atau environment variable sesuai setup Anda.

Catatan praktik yang saya sarankan

Code node paling efektif saat dipakai untuk logika kecil yang jelas. Jika kodenya mulai panjang, bercabang banyak, atau memuat aturan bisnis yang kompleks, pertimbangkan untuk memindahkannya ke service terpisah atau memecah workflow menjadi bagian yang lebih kecil.

Checklist sederhana sebelum menyimpan workflow:

  1. Nama field input sudah benar.
  2. Output Code node memakai struktur json.
  3. Kode punya fallback untuk field kosong.
  4. Tidak ada secret di dalam kode.
  5. Output sudah diuji dari node setelahnya.

Preview tutorial #8

Di tutorial berikutnya, kita akan membahas error handling dan retry di n8n. Ini penting saat workflow mulai memanggil API, memproses data dari sumber eksternal, atau menjalankan proses yang bisa gagal sewaktu-waktu.

Referensi

  1. Code node, n8n Docs, https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/. Tanggal publikasi/update sumber: tidak terverifikasi pada brief artikel. Tanggal akses: 22 Agustus 2026.
  2. Understand n8n's data structure, n8n Docs, https://docs.n8n.io/data/data-structure/. Tanggal publikasi/update sumber: tidak terverifikasi pada brief artikel. Tanggal akses: 22 Agustus 2026.