Expression là gì?
Expression trong n8n là cú pháp đặc biệt cho phép truy cập, biến đổi và tính toán dữ liệu động từ các node trước đó ngay trong các trường tham số của node. Nó sử dụng dấu ngoặc kép kép {{ }} để bao quanh công thức, giúp workflow linh hoạt mà không cần node riêng biệt cho phép biến đổi dữ liệu. Expression biến n8n từ no-code thành low-code bằng cách hỗ trợ tham chiếu dữ liệu thời gian thực.
Expression thường bắt đầu bằng $json để lấy dữ liệu từ node trước, hoặc các hàm built-in như $today, $now. Người dùng kích hoạt bằng cách chọn tab Expression trong trường input của node.
Expression có vai trò gì trong n8n?
Expression đóng vai trò cốt lõi trong việc tạo giá trị động (dynamic values) cho workflow, thay thế hard-code bằng dữ liệu thực tế từ input. Nó giúp kết nối dữ liệu giữa các node, thực hiện logic điều kiện, format dữ liệu mà không làm phức tạp canvas.
Trong n8n, Expression xuất hiện ở mọi trường tham số: URL endpoint, body request, điều kiện IF, tên file, v.v. Vai trò chính bao gồm tham chiếu dữ liệu trước ($json), áp dụng hàm chuyển đổi, và xử lý mảng/object.
Một số vai trò cụ thể:
- Truy cập dữ liệu từ node trước:
{{ $json.name }}lấy trườngnametừ item hiện tại. - Lấy item cụ thể:
{{ $json.last() }}hoặc{{ $('Node Name').first().json.id }}. - Tính toán động:
{{ $today.minus(7, 'days') }}tạo ngày 7 ngày trước.
Expression được dùng như thế nào trong thực tế?
Expression được dùng bằng cách chuyển sang tab Expression trong trường input của node, sau đó viết công thức trong editor. Editor hỗ trợ autocomplete, drag-drop từ output pane để tạo reference tự động.
Ví dụ thực tế trong workflow:
- Truy cập dữ liệu đơn giản: Trong node HTTP Request, dùng
{{ $json.userId }}làm path parameter để gọi API động. - Xử lý mảng:
{{ $json.items.map(item => item.name) }}trích xuất danh sách tên từ array. - Logic điều kiện:
{{ $json.score > 80 ? 'Pass' : 'Fail' }}dùng ternary operator thay IF node đơn giản. - Xử lý ngày giờ với Luxon:
{{ $now.toFormat('yyyy-MM-dd') }}format thời gian hiện tại. - Chaining phức tạp:
{{ $json.text.toLowerCase().replace('old', 'new') }}kết hợp string methods.
Để test, execute node riêng lẻ và xem output pane để debug expression.
Các use case phổ biến:
- Tạo dynamic endpoint:
https://api.example.com/users/{{ $json.id }}. - Filter và map dữ liệu:
{{ $input.all().filter(item => item.json.active).map(item => item.json.email) }}. - Xử lý null:
{{ $json.value ?? 'default' }}dùng null coalescing.
Những lưu ý quan trọng về Expression
Expression mạnh nhưng dễ lỗi nếu không nắm syntax chính xác, đặc biệt với dữ liệu nested hoặc multi-item. Luôn kiểm tra output của node trước bằng Execute Step để tránh runtime error.
Các lưu ý chính:
- Phạm vi dữ liệu:
$jsonmặc định lấy item hiện tại; dùng$input.all()cho toàn bộ input,$('Node Name')cho node cụ thể. - Hàm built-in: Sử dụng Luxon cho date (
$today.plus({ days: 1 })), string methods (.toUpperCase()), array methods (.map(),.filter()). - Giới hạn: Không thay thế Code node cho logic phức tạp multi-line; Expression phù hợp one-liner.
- Debug: Nếu lỗi, kiểm tra JSON structure trong output pane; dùng
{{ $json }}để inspect toàn bộ. - Performance: Tránh expression nặng trong loop lớn, ưu tiên Set node cho transformation phức tạp.
Lỗi phổ biến: Quên .json sau $, sai tên node, hoặc không handle empty array dẫn đến undefined.
Các thuật ngữ liên quan đến Expression
Dưới đây là một số thuật ngữ liên quan trực tiếp đến Expression trong n8n, giúp hiểu rõ hơn ngữ cảnh sử dụng.
- $json: Biến tham chiếu dữ liệu JSON từ node trước, là nền tảng của hầu hết Expression.
- Luxon: Thư viện date-time tích hợp trong n8n, dùng qua
$nowhoặc$todaycho xử lý thời gian động. - Ternary operator: Cú pháp
condition ? true : falsecho logic điều kiện ngắn gọn trong Expression. - Code node: Node thay thế Expression cho script JavaScript/Python multi-line phức tạp.
Các câu hỏi thường gặp
Expression khác gì với Code node trong n8n?
Expression dùng cho logic ngắn gọn inline trong trường tham số, trong khi Code node dành cho script multi-line phức tạp với full JS/Python access. Expression nhanh hơn cho data manipulation đơn giản; Code node mạnh hơn cho custom logic.
Làm sao debug Expression bị lỗi trong n8n?
Chạy Execute Step trên node để xem output pane, kiểm tra JSON structure và thử {{ $json }} để inspect. Sử dụng editor autocomplete và sticky notes trong template tutorial để học syntax.
Khi nào nên dùng Expression thay vì Set node?
Dùng Expression cho giá trị động trực tiếp trong tham số; Set node cho transformation lớn trước khi pass data. Expression tiết kiệm node nhưng kém readable với logic dài.
Expression có hỗ trợ xử lý array lớn không?
Expression hỗ trợ array methods như .map(), .filter() hiệu quả cho dataset nhỏ đến trung bình, nhưng với data lớn nên dùng Code node hoặc tách transformation để tránh timeout.