เอกสารประกอบสำหรับปัญหาและคำถามทั่วไปใน node คำขอ HTTP ใน n8n ซึ่งเป็นแพลตฟอร์มอัตโนมัติของ workflow รวมถึงรายละเอียดของปัญหาและแนวทางแก้ไขที่แนะนำ
ต่อไปนี้เป็นข้อผิดพลาดและปัญหาทั่วไปบางประการเกี่ยวกับ HTTP Request และขั้นตอนในการแก้ไขหรือแก้ไขปัญหาเหล่านั้น
คำขอไม่ถูกต้อง - โปรดตรวจสอบ parameter ของคุณ
ข้อผิดพลาดนี้จะปรากฏขึ้นเมื่อ node ได้รับข้อผิดพลาด 400 ซึ่งบ่งชี้ว่าเป็นคำขอที่ไม่ถูกต้อง ข้อผิดพลาดนี้มักเกิดขึ้นเนื่องจาก:
- คุณกำลังใช้ชื่อหรือค่าที่ไม่ถูกต้องใน Query Parameter.
- คุณกำลังส่งผ่านค่า array ใน Query Parameter แต่ array ไม่ได้จัดรูปแบบอย่างถูกต้อง ลองใช้ Array Format in Query Parameters ตัวเลือก
ตรวจสอบเอกสารประกอบ API สำหรับบริการของคุณเพื่อจัดรูปแบบ parameter การค้นหาของคุณ
ไม่พบทรัพยากรที่คุณร้องขอ
ข้อผิดพลาดนี้จะปรากฏขึ้นเมื่อถึงจุดสิ้นสุด URL คุณป้อนไม่ถูกต้อง
อาจเกิดจากการพิมพ์ผิดใน URL หรือ API ที่เลิกใช้แล้ว โปรดดูเอกสารประกอบ API ของบริการของคุณเพื่อยืนยันว่าคุณมีตำแหน่งข้อมูลที่ถูกต้อง
การเชื่อมต่อถูกปฏิเสธ (ECONNREFUSED)
ข้อผิดพลาดนี้จะปรากฏขึ้นเมื่อ node เข้าถึงโฮสต์บนเครือข่าย แต่พอร์ตเป้าหมายไม่มี Listener การเชื่อมต่อ TCP ถูกปฏิเสธอย่างแข็งขัน ไม่ใช่ความล้มเหลวของ DNS การหมดเวลา หรือไฟร์วอลล์หลุด
บน n8n ที่โฮสต์เอง สาเหตุที่พบบ่อยที่สุดคือการเชื่อมต่อเครือข่าย Docker ภายในคอนเทนเนอร์ n8n localhost และ 127.0.0.1 ชี้ไปที่ตัวคอนเทนเนอร์ ไม่ใช่ที่เครื่องโฮสต์ คำขอที่จะ http://localhost:5000 จาก node ลงจอดบนพอร์ตของคอนเทนเนอร์ n8n 5000 โดยที่ไม่มีอะไรฟัง
ในการแก้ไข ให้ระบุเป้าหมายด้วยชื่อที่คอนเทนเนอร์สามารถกำหนดเส้นทางไปยัง:
เป้าหมายบนเครื่องโฮสต์ Docker Desktop (Mac หรือ Windows) (Target on the host machine, Docker Desktop (Mac or Windows)) : การใช้งาน
http://host.docker.internal:<port>ใน URL สนาม Docker Desktop จะเพิ่มชื่อโฮสต์นี้โดยอัตโนมัติเป้าหมายบนเครื่องโฮสต์ Linux (Target on the host machine, Linux) : ผ่าน
--add-host=host.docker.internal:host-gatewayลงในภาชนะหรือชุดextra_hostsในdocker-compose.yml:services: n8n: image: n8nio/n8n extra_hosts: - "host.docker.internal:host-gateway"การแก้ไขเดียวกันนี้ได้รับการบันทึกไว้สำหรับ node MySQL .
กำหนดเป้าหมายในคอนเทนเนอร์อื่นบนสแต็ก Compose เดียวกัน (Target in another container on the same Compose stack) : ใช้ชื่อบริการเป็นชื่อโฮสต์ เป็นต้น
http://my-api:5000. อ้างอิงถึงพอร์ตภายในของคอนเทนเนอร์ ไม่ใช่ที่เผยแพร่ports:การทำแผนที่
สาเหตุที่แยกต่างหากปรากฏบน Node.js 17 ขึ้นไป แม้จะอยู่นอก Docker: localhost แก้ไขเป็นที่อยู่ IPv6 ::1 ก่อน 127.0.0.1 . หากเป้าหมายผูกมัดเพียงเท่านั้น 127.0.0.1 ความพยายามในการใช้ IPv6 จะถูกปฏิเสธและการถอยกลับเป็น IPv4 จะไม่สำเร็จภายใน node คำขอ HTTP เสมอไป
ใช้ http://127.0.0.1:<port> ใน URL สนามแทน localhost.
หากต้องการตรวจสอบการแก้ไขก่อนเรียกใช้ workflow อีกครั้ง ให้ดำเนินการในคอนเทนเนอร์ n8n แล้วลองใช้ URL wget:
docker exec -it n8n wget -qO- http://host.docker.internal:5000/health
ถ้า wget จากภายในคอนเทนเนอร์สำเร็จ node คำขอ HTTP ก็สำเร็จเช่นกัน ถ้า wget ยังส่งคืน "การเชื่อมต่อถูกปฏิเสธ" สาเหตุคือเครือข่ายหรือบริการเป้าหมาย ไม่ใช่ n8n
บน n8n Cloud workflow จะทำงานบนโครงสร้างพื้นฐานของ n8n ไม่มี localhost และไม่มีเส้นทางไปยังบริการบนเครื่องของคุณ เปิดเผยเป้าหมายเฉพาะในพื้นที่ผ่านอุโมงค์และใช้ URL สาธารณะใน node คำขอ HTTP
parameter JSON ต้องเป็น JSON ที่ถูกต้อง
ข้อผิดพลาดนี้จะปรากฏขึ้นเมื่อคุณส่ง parameter เป็น JSON และไม่ได้จัดรูปแบบเป็น JSON ที่ถูกต้อง
หากต้องการแก้ไข ให้ตรวจสอบ JSON ที่คุณป้อนสำหรับปัญหาเหล่านี้:
ทดสอบ JSON ในตัวตรวจสอบ JSON หรือตัวแยกวิเคราะห์ไวยากรณ์เพื่อค้นหาข้อผิดพลาด เช่น เครื่องหมายอัญประกาศหายไป เครื่องหมายจุลภาคเพิ่มเติมหรือหายไป array ที่จัดรูปแบบไม่ถูกต้อง วงเล็บเหลี่ยมหรือวงเล็บปีกกาเพิ่มเติมหรือหายไป และอื่นๆ
หากคุณเคยใช้ Expression ใน node ตรวจสอบให้แน่ใจว่าคุณได้รวม JSON ทั้งหมดไว้ในวงเล็บปีกกาคู่ เช่น:
{{ { "myjson": { "name1": "value1", "name2": "value2", "array1": ["value1","value2"] } } }}
ต้องห้าม - อาจตรวจสอบข้อมูลประจำตัวของคุณ
ข้อผิดพลาดนี้จะปรากฏขึ้นเมื่อ node ได้รับข้อผิดพลาด 403 ซึ่งบ่งชี้ว่าการรับรองความถูกต้องล้มเหลว
ในการแก้ไข ให้ตรวจสอบข้อมูลประจำตัวที่เลือกและตรวจดูให้แน่ใจว่าคุณสามารถตรวจสอบสิทธิ์ได้ คุณอาจต้อง:
- อัปเดตสิทธิ์หรือขอบเขตเพื่อให้คีย์ API หรือบัญชีของคุณดำเนินการตามที่คุณเลือกได้
- จัดรูปแบบข้อมูลประจำตัวทั่วไปของคุณในลักษณะอื่น
- สร้างคีย์ API หรือ token ใหม่ด้วยสิทธิ์หรือขอบเขตที่เหมาะสม
429 - บริการได้รับการร้องขอจากคุณมากเกินไป
ข้อผิดพลาดนี้จะปรากฏขึ้นเมื่อ node ได้รับ ข้อผิดพลาด 429 จากบริการที่คุณโทร ซึ่งมักหมายความว่าคุณได้ใช้งานถึงขีดจำกัดอัตราของบริการนั้นแล้ว คุณสามารถหาข้อมูลเพิ่มเติมได้ที่ Handle rate limits หน้า
เพื่อแก้ไขข้อผิดพลาด คุณสามารถใช้หนึ่งในตัวเลือกในตัวของ node คำขอ HTTP:
Batching
ใช้ตัวเลือกนี้เพื่อส่งคำขอเป็นกลุ่มและทำให้เกิดความล่าช้าระหว่างคำขอเหล่านั้น
- ใน node คำขอ HTTP ให้เลือก เพิ่มตัวเลือก > การผสม (Add Option > Batching).
- ชุด Items per Batch ถึงจำนวนรายการ input ที่จะรวมไว้ในคำขอแต่ละรายการ
- ชุด Batch Interval (ms) เพื่อแนะนำความล่าช้าระหว่างคำขอในหน่วยมิลลิวินาที ตัวอย่างเช่น หากต้องการส่งหนึ่งคำขอไปยัง API ต่อวินาที ให้ตั้งค่า Batch Interval (ms) ถึง
1000.
Retry on Fail
ใช้ตัวเลือกนี้เพื่อลอง node อีกครั้งหลังจากความพยายามล้มเหลว
- ใน node คำขอ HTTP ให้ไปที่ Settings และเปิดใช้งาน Retry on Fail.
- ชุด Max Tries เป็นจำนวนครั้งสูงสุดที่ n8n ควรลอง node อีกครั้ง
- ชุด Wait Between Tries (ms) ไปจนถึงความล่าช้าที่ต้องการในหน่วยมิลลิวินาทีระหว่างการลองใหม่ ตัวอย่างเช่น หากต้องการรอหนึ่งวินาทีก่อนที่จะลองร้องขออีกครั้ง ให้ตั้งค่า Wait Between Tries (ms) ถึง
1000.
ไฟล์ที่คุณอัปโหลดมาถึงด้วยชื่อไฟล์ที่ไม่ถูกต้อง
เมื่อคุณส่งไฟล์ด้วย Body Content Type ตั้งค่าเป็น Form-Data , n8n ใช้ชื่อไฟล์ของ multipart/form-data ส่วนหนึ่งมาจากข้อมูลไบนารี ไม่ใช่จาก Name สนาม Name ตั้งชื่อฟิลด์แบบฟอร์มเท่านั้น หากข้อมูลไบนารีไม่มีชื่อไฟล์ n8n จะส่ง file.
สิ่งนี้สำคัญเมื่อ API การรับระบุการอัพโหลดด้วยชื่อไฟล์ แทนที่จะเป็นชื่อฟิลด์ของแบบฟอร์ม หรือเมื่อต้องใช้ชื่อหรือนามสกุลเฉพาะ คำขอมาถึง แต่ API ปฏิเสธ ซึ่งมักจะมีข้อผิดพลาด 400 แจ้งว่าไฟล์หายไป ตัวอย่างเช่น Convert to Text File การดำเนินงานของ Convert to File ตั้งชื่อ output file.txt โดยค่าเริ่มต้น ดังนั้น API ที่คาดหวัง index.html ไม่พบมัน
หากต้องการแก้ไข ให้ตั้งชื่อไฟล์ในข้อมูลไบนารีก่อน node คำขอ HTTP:
- ใน node แปลงเป็นไฟล์ ให้ตั้งค่า File Name ตัวเลือกสำหรับชื่อที่ API คาดหวัง
- ในก Code ให้ตั้งชื่อไฟล์ในคุณสมบัติไบนารี่:
for (const item of $input.all()) {
item.binary.data.fileName = 'index.html';
}
return $input.all();
n8n คัดลอกประเภท MIME ที่เก็บไว้ในข้อมูลไบนารี่ลงใน Content-Type ของส่วนนั้น ดังนั้นให้ตั้งค่านั้นด้วยหาก API ของคุณตรวจสอบ
ประเภทสื่อที่ไม่รองรับ (415) เมื่อคุณส่งไฟล์
ข้อผิดพลาดนี้จะปรากฏขึ้นเมื่อ API คาดหวัง multipart/form-data แต่เนื้อหาคำขอไม่ได้มีหลายส่วน
ประเภทเนื้อหาเนื้อหา > ไฟล์ไบนารี n8n (Body Content Type > n8n Binary File) ส่งไฟล์เป็นเนื้อหาคำขอทั้งหมด ชุด n8n Content-Type เป็นประเภท MIME ที่เก็บไว้ในข้อมูลไบนารีหรือถึง application/octet-stream เมื่อไม่มีเลย และไม่เพิ่มซองจดหมายหรือขอบเขตที่มีหลายส่วน API ที่ยอมรับเฉพาะการอัปโหลดแบบหลายส่วนเท่านั้นที่จะปฏิเสธสิ่งนี้
หากต้องการส่งไฟล์เดียวกันเป็นการอัปโหลดแบบหลายส่วน:
- ชุด Body Content Type ถึง Form-Data.
- เพิ่มก Body Parameters เข้าและตั้งค่า Type ถึง ไฟล์ไบนารี n8n (n8n Binary File).
- ชุด Name เป็นชื่อฟิลด์แบบฟอร์มจากเอกสาร API
- ชุด Input Data Field Name ไปยังคุณสมบัติไบนารี่ที่เก็บไฟล์ เช่น
data.

