Sau đây là 20 cú pháp cơ bản dùng trong code node n8n
- const / let
- string
- number
- boolean
- array []
- object {}
- if / else
- ? :
- &&
- ||
- !
- ??
- ?.
- .includes()
- .trim()
- .split()
- .map()
- .filter()
- .find()
- return
1. const / let
Dùng để tạo biến.
const name = 'Dat';
Có nghĩa: Tạo biến name và gán giá trị "Dat".
Sau đó không được gán lại: name = ‘Nam’; // lỗi
Ví dụ trong code của bạn:
const u = $json;
Nghĩa là:
Tạo biến u, chứa dữ liệu $json.
let
let commandName = '';
Nghĩa là tạo biến commandName, ban đầu bằng chuỗi rỗng.
Sau đó có thể thay đổi:
commandName = '/wol';
Nhớ đơn giản:
const → tạo biến không muốn gán lại
let → tạo biến có thể thay đổi
Trong code n8n, bạn sẽ gặp const rất nhiều.
2. String
String = chuỗi ký tự / văn bản.
Ví dụ:
const name = 'Nguyễn Tiến Đạt';
const command = '/wol';
const ip = '192.168.1.100';
Các giá trị này đều là string. Có thể dùng:
"hello"
'hello'
hoặc:
`hello`
Ví dụ:
const text = 'Xin chào';
3. Number
Number = số.
Ví dụ:
const age = 30;
const port = 8080;
const uid = 774936272;
Đây là số thật, không phải text.
Điểm rất quan trọng:
774936272
khác:
'774936272'
Cái đầu là number, cái sau là string.
Đó chính là lý do code của bạn có:
String(uid)
để chuyển UID thành string.
4. Boolean
Boolean chỉ có 2 giá trị:
true
false
Ví dụ:
const permission = true;
Có quyền.
const permission = false;
Không có quyền.
Trong code của bạn:
const command = input.trim().startsWith('/');
Kết quả chỉ có thể:
true
hoặc:
false
5. Array []
Array = danh sách nhiều giá trị.
Ví dụ:
const users = [
'774936272',
'123456789',
'987654321'
];
Ta có 3 phần tử.
Có thể lấy từng phần tử:
users[0]
→
774936272
users[1]
→
123456789
Chú ý: JavaScript bắt đầu đếm từ 0.
[0] → phần tử thứ 1
[1] → phần tử thứ 2
[2] → phần tử thứ 3
Trong code của bạn:
['774936272'].includes(String(uid))
['774936272'] chính là một Array.
6. Object {}
Object = một nhóm dữ liệu có tên thuộc tính.
Ví dụ:
const user = {
id: 774936272,
name: 'Đạt',
age: 30
};
Ta có:
user
├── id
├── name
└── age
Lấy dữ liệu:
user.id
→ 774936272
user.name
→ "Đạt"
Đây là thứ bạn sẽ gặp cực kỳ nhiều trong n8n, vì JSON về bản chất được biểu diễn bằng object/array.
Ví dụ $json:
{
"name": "Dat",
"age": 30
}
Trong Code node:
$json.name
→ Dat
7. if / else
Dùng để kiểm tra điều kiện.
Ví dụ:
if (permission) {
console.log('Được phép');
} else {
console.log('Không được phép');
}
Có thể đọc như:
Nếu permission đúng → làm việc A.
Nếu không → làm việc B.
Code của bạn:
if (command)
commandName = input.trim()...
Có nghĩa:
Nếu command là true thì lấy tên command.
8. ? : — toán tử 3 ngôi
Đây là một trong những cái rất đáng học.
Cú pháp:
điều_kiện ? giá_trị_A : giá_trị_B
Ví dụ:
const name = permission ? 'Được phép' : 'Từ chối';
Nếu:
permission = true
thì:
name = "Được phép"
Nếu:
permission = false
thì:
name = "Từ chối"
Code của bạn:
const msg = callback ? u.callback_query?.message : u.message;
Cụ thể:
Nếu callback đúng thì lấy u.callback_query.message, nếu không thì lấy u.message.
Rất hay dùng để viết code ngắn.
9. &&
Đây là AND — và.
Ví dụ:
permission && command
Có nghĩa:
permission phải đúng VÀ command phải đúng.
Bảng:
| permission | command | Kết quả |
|---|---|---|
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
Ví dụ:
if (permission && command) {
// xử lý command
}
Nghĩa:
Chỉ xử lý khi người dùng có quyền VÀ gửi command.
10. ||
Đây là OR — hoặc.
Ví dụ:
permission || command
Chỉ cần một trong hai đúng.
| permission | command | Kết quả |
|---|---|---|
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
Một cách dùng rất quan trọng trong n8n
Code của bạn:
u.callback_query?.data || ''
Nghĩa:
Nếu u.callback_query.data có giá trị thì lấy nó, nếu không thì lấy ''.
Ví dụ:
undefined || ''
→ ''
11. !
! nghĩa là phủ định / đảo boolean.
Ví dụ:
!true
→
false
và:
!false
→
true
Ví dụ:
const blocked = !permission;
Nếu:
permission = true
thì:
blocked = false
Đặc biệt: !!
Trong code của bạn:
const callback = !!u.callback_query;
Hai dấu ! liên tiếp thường được dùng để ép một giá trị thành true/false.
Ví dụ:
!!u.callback_query
Nếu tồn tại:
true
Nếu không tồn tại:
false
Bạn có thể hiểu:
!!giá_trị
≈
“Biến cái này thành true hoặc false.”
12. ??
Đây gọi là Nullish Coalescing Operator.
Cú pháp:
A ?? B
Nghĩa là:
Nếu A không có giá trị (null hoặc undefined) thì dùng B.
Ví dụ:
const name = user.name ?? 'Không có tên';
Nếu:
user.name = 'Đạt'
→ name = 'Đạt'
Nếu:
user.name = undefined
→ name = 'Không có tên'
Trong code của bạn
const uid = user?.id ?? null;
Nghĩa:
Lấy user.id; nếu không tồn tại thì cho uid = null.
13. ?.
Đây là Optional Chaining.
Cực kỳ hữu ích khi xử lý JSON Telegram/n8n.
Ví dụ:
user.id
Nếu user không tồn tại → lỗi.
Nhưng:
user?.id
Nếu user không tồn tại → trả về:
undefined
chứ không làm workflow lỗi ngay tại đó.
Ví dụ Telegram
u.callback_query?.message
Nếu có callback:
u.callback_query
↓
message
Nếu không có callback:
u.callback_query = undefined
thì:
u.callback_query?.message
→ undefined.
Đây là lý do code Telegram của bạn dùng ?. rất nhiều.
14. .includes()
Dùng để kiểm tra:
Một giá trị có nằm trong danh sách hay không?
Ví dụ:
const users = ['111', '222', '333'];
Kiểm tra:
users.includes('222')
→ true
users.includes('999')
→ false
Code của bạn:
['774936272'].includes(String(uid))
Có nghĩa:
UID hiện tại có nằm trong danh sách người được phép không?
Đây chính là đoạn phân quyền.
15. .trim()
Dùng để xóa khoảng trắng ở đầu và cuối chuỗi.
Ví dụ:
const input = ' /wol ';
input.trim()
→
/wol
Rất hữu ích khi người dùng nhập Telegram:
/wol 192.168.1.100
16. .split()
Dùng để tách chuỗi thành Array.
Ví dụ:
const text = 'xin chao';
text.split(' ')
→
[
'xin',
'chao'
]
Code của bạn
input.trim().split(/\s+/)
Ví dụ:
/wol 192.168.1.100
thành:
[
'/wol',
'192.168.1.100'
]
Sau đó:
[0]
lấy:
/wol
17. .map()
Cực kỳ quan trọng khi xử lý Array.
map() = đi qua từng phần tử và biến đổi nó.
Ví dụ:
const numbers = [1, 2, 3];
Muốn nhân tất cả với 2:
numbers.map(x => x * 2)
Kết quả:
[2, 4, 6]
Một ví dụ rất thực tế trong n8n:
const users = ['Dat', 'Nam', 'An'];
const result = users.map(x => x.toUpperCase());
Kết quả:
[
'DAT',
'NAM',
'AN'
]
Bạn sẽ gặp map() rất nhiều khi xử lý dữ liệu hàng loạt.
18. .filter()
filter() = lọc danh sách.
Ví dụ:
const numbers = [1, 2, 3, 4, 5];
Lấy số lớn hơn 2:
numbers.filter(x => x > 2)
Kết quả:
[3, 4, 5]
Ví dụ thực tế:
const users = [
{name: 'Dat', permission: true},
{name: 'Nam', permission: false},
{name: 'An', permission: true}
];
Lọc người có quyền:
users.filter(user => user.permission)
Kết quả:
[
{name: 'Dat', permission: true},
{name: 'An', permission: true}
]
19. .find()
find() = tìm phần tử đầu tiên thỏa mãn điều kiện.
Ví dụ:
const users = [
{id: 1, name: 'Dat'},
{id: 2, name: 'Nam'},
{id: 3, name: 'An'}
];
Tìm user có ID 2:
users.find(user => user.id === 2)
Kết quả:
{
id: 2,
name: 'Nam'
}
Khác với filter():
filter → có thể trả về nhiều phần tử
find → chỉ lấy phần tử đầu tiên tìm được
20. return
return = trả kết quả ra ngoài.
Trong Code node n8n, đây là cực kỳ quan trọng.
Ví dụ:
return {
json: {
name: 'Dat'
}
};
n8n nhận được:
{
"name": "Dat"
}
Trong code của bạn:
return {
json: {
input,
callback,
command,
commandName,
uid,
permission,
platform: 'telegram',
chatId: msg?.chat?.id ?? null,
callbackQueryId: u.callback_query?.id ?? null
}
};
Nó có nghĩa:
Đưa toàn bộ dữ liệu đã xử lý sang node tiếp theo.
Tổng hợp 20 cú pháp: Bạn có thể lưu bảng này để tra nhanh
| # | Cú pháp | Hiểu đơn giản |
|---|---|---|
| 1 | const / let | Tạo biến |
| 2 | String | Văn bản |
| 3 | Number | Số |
| 4 | Boolean | true / false |
| 5 | [] | Danh sách |
| 6 | {} | Đối tượng dữ liệu |
| 7 | if / else | Nếu / nếu không |
| 8 | ? : | Nếu A thì B, không thì C |
| 9 | && | Và |
| 10 | || | Hoặc |
| 11 | ! | Đảo đúng/sai |
| 12 | ?? | Không có thì dùng giá trị mặc định |
| 13 | ?. | Truy cập an toàn |
| 14 | .includes() | Có nằm trong danh sách không? |
| 15 | .trim() | Xóa khoảng trắng đầu/cuối |
| 16 | .split() | Tách chuỗi |
| 17 | .map() | Biến đổi từng phần tử |
| 18 | .filter() | Lọc danh sách |
| 19 | .find() | Tìm phần tử đầu tiên |
| 20 | return | Trả kết quả |