Sau đây là 20 cú pháp cơ bản dùng trong code node n8n

  1. const / let
  2. string
  3. number
  4. boolean
  5. array []
  6. object {}
  7. if / else
  8. ? :
  9. &&
  10. ||
  11. !
  12. ??
  13. ?.
  14. .includes()
  15. .trim()
  16. .split()
  17. .map()
  18. .filter()
  19. .find()
  20. 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 commandtrue 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 command phải đúng.

Bảng:

permissioncommandKết quả
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

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.

permissioncommandKết quả
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

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ápHiểu đơn giản
1const / letTạo biến
2StringVăn bản
3NumberSố
4Booleantrue / false
5[]Danh sách
6{}Đối tượng dữ liệu
7if / elseNếu / nếu không
8? :Nếu A thì B, không thì C
9&&
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
20returnTrả kết quả