Build a declarative-style node#
tutorial นี้จะพาไปดูวิธีสร้าง node แบบ declarative-style ก่อนเริ่ม แนะนำให้แน่ใจว่านี่คือ style ที่คุณต้องการใช้ ดูรายละเอียดเพิ่มเติมได้ที่ Choose your node building approach
Prerequisites#
คุณต้องติดตั้งสิ่งเหล่านี้ในเครื่องสำหรับพัฒนา:
- git
- Node.js และ npm เวอร์ชันขั้นต่ำ Node 18.17.0 คุณสามารถดูคำแนะนำเกี่ยวกับวิธีการติดตั้งทั้งสองอย่างโดยใช้ nvm (Node Version Manager) สำหรับ Linux, Mac และ WSL ได้ ที่นี่ สำหรับผู้ใช้ Windows โปรดดูคู่มือของ Microsoft เกี่ยวกับ Install NodeJS on Windows
คุณควรมีความเข้าใจพื้นฐานเกี่ยวกับ:
- JavaScript/TypeScript
- REST APIs
- git
Build your node#
ในส่วนนี้ คุณจะ clone node starter repository ของ n8n และสร้าง node ที่เชื่อมต่อกับ NASA API โดยจะสร้าง node ที่ใช้บริการของ NASA สองตัวคือ APOD (Astronomy Picture of the Day) และ Mars Rover Photos เพื่อให้ตัวอย่างโค้ดสั้น node นี้จะไม่ได้ implement ทุก option ของ Mars Rover Photos endpoint
Existing node
n8n มี NASA node ที่ built-in มาอยู่แล้ว เพื่อไม่ให้ชนกับ node เดิม คุณจะต้องตั้งชื่อ node ของคุณให้ต่างออกไป
Step 1: Set up the project#
n8n มี starter repository สำหรับพัฒนา node การใช้ starter จะช่วยให้คุณมี dependencies ที่จำเป็นครบ และมี linter ให้ด้วย
Clone repository แล้วเข้าไปใน directory:
- Generate a new repository จาก template repository
- Clone repository ใหม่ของคุณ:
1 2
git clone https://github.com/<your-organization>/<your-repo-name>.git n8n-nodes-nasa-pics cd n8n-nodes-nasa-pics
starter จะมีตัวอย่าง node และ credentials มาให้ ลบ directory และไฟล์เหล่านี้ออก:
nodes/ExampleNode
nodes/HTTPBin
credentials/ExampleCredentials.credentials.ts
credentials/HttpBinApi.credentials.ts
จากนั้นสร้าง directory และไฟล์เหล่านี้:
nodes/NasaPics
nodes/NasaPics/NasaPics.node.json
nodes/NasaPics/NasaPics.node.ts
credentials/NasaPicsApi.credentials.ts
ไฟล์เหล่านี้คือไฟล์หลักที่ node ทุกตัวต้องมี ดูรายละเอียดเพิ่มเติมได้ที่ Node file structure
ติดตั้ง dependencies ของโปรเจกต์:
1 |
|
Step 2: Add an icon#
เซฟโลโก้ NASA แบบ SVG จาก ที่นี่ แล้วตั้งชื่อว่า nasapics.svg
ไว้ใน nodes/NasaPics/
n8n แนะนำให้ใช้ SVG สำหรับไอคอน node ของคุณ แต่คุณสามารถใช้ PNG ได้เช่นกัน หากใช้ PNG ความละเอียดของไอคอนควรเป็น 60x60px ไอคอน Node ควรมีอัตราส่วนภาพสี่เหลี่ยมจัตุรัสหรือเกือบสี่เหลี่ยมจัตุรัส
อย่าอ้างอิง Font Awesome
หากคุณต้องการใช้ไอคอน Font Awesome ใน node ของคุณ ให้ดาวน์โหลดและฝังรูปภาพนั้น
Step 3: Create the node#
node ทุกตัวต้องมี base file ดูรายละเอียด parameter ของ base file ได้ที่ Node base file
ในตัวอย่างนี้ใช้ไฟล์ NasaPics.node.ts
เพื่อให้ง่ายจะใส่โค้ดทุกอย่างไว้ในไฟล์เดียว ถ้า node ซับซ้อนกว่านี้ควรแยก module ดูรายละเอียดที่ Node file structure
Step 3.1: Imports#
เริ่มจาก import module ที่ต้องใช้:
1 |
|
Step 3.2: Create the main class#
node ต้อง export interface ที่ implements INodeType ซึ่งต้องมี description
interface และ properties
array
Class names and file names
ชื่อ class กับชื่อไฟล์ต้องตรงกัน เช่น class NasaPics
ไฟล์ต้องชื่อ NasaPics.node.ts
1 2 3 4 5 6 7 8 |
|
Step 3.3: Add node details#
node ทุกตัวต้องมี parameter พื้นฐาน เช่น display name, icon และข้อมูลพื้นฐานสำหรับ request เพิ่มโค้ดนี้ใน description
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
n8n จะใช้ property ใน description
บางตัว เช่น displayName
, icon
, description
, subtitle
เพื่อแสดง node ใน Editor UI
Step 3.4: Add resources#
resource object จะกำหนดว่า node นี้ใช้ API resource อะไร ในตัวอย่างนี้จะใช้ endpoint planetary/apod
และ mars-photos
ของ NASA ให้เพิ่ม resource options สองตัวใน NasaPics.node.ts
อัปเดต properties
array ด้วย resource object:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
type
จะกำหนดว่า UI ของ n8n จะแสดง element แบบไหน และบอก n8n ว่าควรรับข้อมูลแบบไหนจาก user options
จะทำให้มี dropdown ให้เลือก ดูรายละเอียดที่ Node UI elements
Step 3.5: Add operations#
operations object จะกำหนด operation ที่ใช้กับ resource ได้
ใน declarative-style node, operations object จะมี routing
(ใน options
array) เพื่อกำหนดรายละเอียด API call
เพิ่มโค้ดนี้ใน properties
array หลัง resource object:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
|
โค้ดนี้จะสร้าง operation สองตัว: ตัวหนึ่งสำหรับดึง APOD ของวันนี้ และอีกตัวสำหรับดึงรูปจาก Mars Rover โดย object ชื่อ roverName
จะให้ user เลือกว่าจะเอารูปจาก Rover ตัวไหน routing object ใน Mars Rover operation จะใช้ค่านี้สร้าง URL สำหรับ API call
Step 3.6: Optional fields#
API ส่วนใหญ่รวมถึง NASA API จะมี field เสริมที่ไม่บังคับ เพื่อให้ user ไม่งง n8n จะซ่อน field เหล่านี้ไว้ใน Additional Fields ใน UI
ในตัวอย่างนี้จะเพิ่ม field เสริมให้ user เลือกวันที่สำหรับ APOD endpoint เพิ่มโค้ดนี้ใน properties array:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Step 4: Set up authentication#
NASA API ต้องใช้ API key ในการ auth
เพิ่มโค้ดนี้ใน nasaPicsApi.credentials.ts
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
ดูรายละเอียดเกี่ยวกับ credentials file และ options ได้ที่ Credentials file
Step 5: Add node metadata#
metadata ของ node จะอยู่ในไฟล์ JSON ที่ root ของ node n8n เรียกไฟล์นี้ว่า codex file ในตัวอย่างนี้คือ NasaPics.node.json
เพิ่มโค้ดนี้ในไฟล์ JSON:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
ดูรายละเอียด parameter เหล่านี้ได้ที่ Node codex files
Step 6: Update the npm package details#
รายละเอียด npm package จะอยู่ใน package.json
ที่ root ของโปรเจกต์ ต้องใส่ object n8n
ที่ลิงก์ไปยัง credentials และ base node file อัปเดตไฟล์นี้ให้มีข้อมูลแบบนี้:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
คุณต้องอัปเดต package.json
ให้มีข้อมูลของคุณเอง เช่น ชื่อและ repository URL ดูรายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ package.json
ได้ที่ npm's package.json documentation
Test your node#
คุณสามารถทดสอบ node ของคุณในขณะที่สร้างได้โดยการรันใน n8n instance บนเครื่องของคุณ
- ติดตั้ง n8n โดยใช้ npm:
1
npm install n8n -g
- เมื่อคุณพร้อมที่จะทดสอบ node ของคุณ ให้ publish มันในเครื่อง:
1 2 3
# ในไดเรกทอรี node ของคุณ npm run build npm link
-
ติดตั้ง node ลงใน n8n instance บนเครื่องของคุณ:
1 2 3
# ในไดเรกทอรี nodes ภายในการติดตั้ง n8n ของคุณ # node-package-name คือชื่อจาก package.json npm link <node-package-name>
ตรวจสอบไดเรกทอรีของคุณ
ตรวจสอบให้แน่ใจว่าคุณรัน
npm link <node-name>
ในไดเรกทอรี nodes ภายในการติดตั้ง n8n ของคุณ ซึ่งอาจเป็น:~/.n8n/custom/
~/.n8n/<your-custom-name>
: หากการติดตั้ง n8n ของคุณตั้งชื่ออื่นโดยใช้N8N_CUSTOM_EXTENSIONS
-
เริ่ม n8n:
1
n8n start
-
เปิด n8n ในเบราว์เซอร์ของคุณ คุณควรเห็น nodes ของคุณเมื่อคุณค้นหาในแผง nodes
ชื่อ Node
ตรวจสอบให้แน่ใจว่าคุณค้นหาโดยใช้ชื่อ node ไม่ใช่ชื่อ package ตัวอย่างเช่น หากชื่อ npm package ของคุณคือ
n8n-nodes-weather-nodes
และ package นั้นมี nodes ชื่อrain
,sun
,snow
คุณควรค้นหาrain
ไม่ใช่weather-nodes
การแก้ไขปัญหา#
- ไม่มีไดเรกทอรี
custom
ในการติดตั้ง~/.n8n
บนเครื่อง
คุณต้องสร้างไดเรกทอรี custom
ด้วยตนเองและรัน npm init
1 2 3 4 |
|
Next steps#
- Deploy your node
- ดูตัวอย่าง declarative node: n8n's Brevo node (main node เป็น declarative, trigger node เป็น programmatic)
- ศึกษาเรื่อง node versioning