วิธีแก้บั๊ก No testing function found ใน n8n สำหรับคนทำ Custom Node
คุณกำลังสร้าง Custom Node (เครื่องมือเสริมที่เขียนขึ้นเอง) ใน n8n (โปรแกรมช่วยจัดลำดับการทำงานอัตโนมัติ) อยู่ใช่ไหมครับ? พอคุณเขียนส่วน Credential (รหัสผ่านหรือกุญแจสำหรับเชื่อมต่อ) เสร็จแล้วพอกดปุ่ม Test (ทดสอบ) ในหน้า UI (หน้าจอสำหรับผู้ใช้งาน) กลับเจอข้อความกวนใจว่า No testing function found for this credential ทั้งที่เช็กโค้ดแล้วว่าเขียนไว้ครบถ้วน ปัญหานี้เป็นเรื่องที่พบบ่อยมากสำหรับนักพัฒนา Node ครับ แม้แต่ในเวอร์ชันล่าสุดก็ยังเจอกันอยู่
ทำไม n8n ถึงหาฟังก์ชันทดสอบไม่เจอ
ต้นเหตุไม่ได้มาจากคุณเขียนโค้ดผิดครับ แต่มันเป็นบั๊กที่ระบบการโหลดไฟล์ของ n8n เอง ปกติเวลาเรากดปุ่มทดสอบ n8n จะไปหาไฟล์ที่ระบุไว้เพื่อรันการทดสอบ แต่สำหรับ Custom Node ที่เราเขียนขึ้นเอง ระบบกลับหาจุดเชื่อมโยงนั้นไม่เจอครับ ทำให้ n8n มองไม่เห็นฟังก์ชันทดสอบที่เราเขียนไว้ในไฟล์ Node แม้เราจะระบุชื่อไว้ถูกต้องแล้วก็ตาม
วิธีแก้ที่ง่ายและยั่งยืนที่สุด
วิธีแก้ที่แนะนำคือให้เลิกหวังพึ่งการเชื่อมโยงระหว่างไฟล์ครับ เราควรย้ายชุดคำสั่งทดสอบมาไว้ในไฟล์ Credential โดยตรงเลย วิธีนี้จะช่วยให้ n8n เรียกใช้งานได้ทันทีโดยไม่ต้องไปงมหาจากไฟล์อื่น ซึ่งโค้ดที่ใช้จะเป็นรูปแบบ ICredentialTestRequest (ชุดคำสั่งมาตรฐานสำหรับส่งคำขอทดสอบ) ครับ
ตัวอย่างการแก้ไขโค้ด
จากเดิมที่คุณอาจจะเขียนแบบนี้:
// ในไฟล์ Credential
testedBy = 'MyApiNode'; // แบบนี้มักจะพังให้เปลี่ยนมาเขียนแบบนี้แทนครับ:
// ในไฟล์ Credential
test: ICredentialTestRequest = {
request: {
baseURL: 'https://api.example.com',
url: '/me',
headers: {
Authorization: '=Bearer {{$credentials.apiKey}}',
},
},
rules: [
{
type: 'responseSuccessBody',
properties: {
key: 'data.id',
value: (val) => typeof val === 'string',
message: 'รหัสผ่านถูกต้อง',
},
},
],
};หลังจากแก้ไขแล้ว อย่าลืมลบคำสั่ง testedBy ในไฟล์ Credential และลบ credentialTest ในไฟล์ Node ทิ้งด้วยครับ เพราะมันเป็นส่วนที่ไม่ได้ใช้งานแล้วและจะทำให้คนอื่นที่มาอ่านโค้ดทีหลังงงได้ครับ
วิธีแก้ทางเลือก: แพ็ก Node เป็นโมดูลจริง
ถ้าคุณยังอยากเก็บโค้ดทดสอบไว้ในไฟล์ Node เหมือนเดิม มีอีกทางคือต้องเปลี่ยนวิธีติดตั้งครับ แทนที่จะใช้การ Symlink (การสร้างทางลัดของโฟลเดอร์) เข้าไปที่โฟลเดอร์ custom ของ n8n ให้คุณใช้วิธีแพ็กไฟล์เป็นโมดูลแทนครับ
- ใช้คำสั่ง npm pack เพื่อสร้างไฟล์สำหรับติดตั้ง
- ใช้คำสั่ง npm install ตามด้วยชื่อไฟล์ที่ได้มา เพื่อติดตั้งลงใน n8n
วิธีนี้จะทำให้ n8n มองเห็นไฟล์ของคุณเป็นเหมือน Community Node (เครื่องมือเสริมที่คนทั่วไปสร้างแจก) และจะช่วยให้ระบบหาฟังก์ชันทดสอบเจอตามปกติครับ แต่ข้อเสียคือทุกครั้งที่แก้โค้ด คุณต้องทำขั้นตอนเหล่านี้ใหม่เสมอ
สรุปสั้น ๆ
ปัญหาปุ่มทดสอบใช้งานไม่ได้เกิดจาก n8n หาจุดเชื่อมต่อระหว่างไฟล์ Custom Node ไม่เจอครับ วิธีแก้ที่ดีที่สุดคือการเขียนชุดคำสั่งทดสอบไว้ในไฟล์ Credential ของตัวเองไปเลย วิธีนี้ใช้ได้ผลแน่นอนไม่ว่าคุณจะติดตั้ง Node แบบไหน และยังช่วยลดความซับซ้อนของโค้ดลงด้วยครับ
เรียบเรียงจากข่าวของ DEV Community อ่านข่าวต้นฉบับ ↗