ใน JavaScript สามารถทำได้ผ่านทาง “ หน้าต่าง.ดึงข้อมูล() ' วิธี. อย่างไรก็ตาม ใน “ node.js ” ฟังก์ชั่นนี้สามารถทำได้โดยใช้หลายแพ็คเกจ เช่น การดึงโหนด ฯลฯ
บล็อกนี้อธิบายเนื้อหาในส่วนต่อไปนี้:
- “การดึงโหนด” คืออะไร?
- ข้อกำหนดเบื้องต้นสำหรับการใช้การดึงโหนด
- วิธีสร้างคำขอ HTTP ใน node.js ด้วย node-fetch
- จะเริ่มต้นการดึงโหนดได้อย่างไร
- ส่งคำขอรับผ่านการดึงข้อมูลโหนด
- ดึงข้อมูล JSON จาก Rest API
- โพสต์คำขอผ่านการดึงโหนด
- รหัสสถานะ HTTP คืออะไร
- การจัดการกับข้อยกเว้นและข้อจำกัด
- กรณีการใช้งานอื่นๆ ของการดึงโหนด
- บทสรุป
“การดึงโหนด” คืออะไร?
“ โหนดดึงข้อมูล ” สอดคล้องกับโมดูลน้ำหนักเบาที่ทำให้ node.js การดึงข้อมูล API เข้าถึงได้ โมดูลนี้ยังช่วยให้ผู้ใช้สามารถใช้ ' ดึงข้อมูล() ” วิธีการใน node.js ซึ่งส่วนใหญ่จะคล้ายกับ JavaScript “ หน้าต่าง.ดึงข้อมูล() ' วิธี.
ไวยากรณ์ (ดึงข้อมูล () วิธีการ)
ดึง ( URL [ , ตัวเลือก ] ) ;
ในรูปแบบนี้:
- “ URL ” หมายถึง URL ของทรัพยากรที่ต้องการดึงข้อมูล/ดึงข้อมูล
- “ ตัวเลือก ” จำเป็นต้องใช้พารามิเตอร์เมื่อจำเป็นต้องใช้เมธอด “fetch()” นอกเหนือจากการสร้าง “ รับ ' ขอ.
ค่าส่งคืน
ฟังก์ชันนี้ดึงวัตถุการตอบสนองที่ประกอบด้วยข้อมูลเกี่ยวกับการตอบสนอง HTTP ดังนี้:
- ข้อความ: ดึงเนื้อหาการตอบสนองในรูปแบบของสตริง
- ส่วนหัว: ส่งกลับวัตถุที่ประกอบด้วยตัวจัดการการตอบสนอง
- เจสัน(): แยกวิเคราะห์เนื้อหาการตอบสนองในออบเจ็กต์ JSON
- ข้อความสถานะ/สถานะ: ประกอบด้วยข้อมูลเกี่ยวกับรหัสสถานะ HTTP
- ตกลง: ให้” จริง ” หากสถานะเป็นรหัสสถานะ 2xx
ข้อกำหนดเบื้องต้นสำหรับการใช้การดึงโหนด
ต่อไปนี้เป็นข้อกำหนดเบื้องต้นที่ต้องพิจารณาก่อนเริ่มต้นด้วย “ โหนดดึงข้อมูล ”:
- ติดตั้งอย่างน้อยหรือล่าสุดกว่าเวอร์ชัน 17.5
- ความรู้พื้นฐานของจาวาสคริปต์
วิธีสร้างคำขอ HTTP ใน node.js ด้วย node-fetch
การสร้างคำขอ HTTP เป็นขั้นตอนแบบอะซิงโครนัสเนื่องจากการได้รับการตอบสนองที่ร้องขอต้องใช้เวลาระยะหนึ่ง ดังนั้นจึงมีวิธีการสองวิธีในการใช้ขั้นตอนแบบอะซิงโครนัส ประการแรกคือผู้ใช้สามารถรอการตอบกลับแล้วจึงดำเนินการต่อด้วยโค้ด อีกอันกำลังรันโค้ดแบบขนาน
จะเริ่มต้นการดึงโหนดได้อย่างไร
ก่อนที่จะเริ่มหรือติดตั้ง “ โหนดดึงข้อมูล ” โมดูลเริ่มต้นโปรเจ็กต์โหนดด้วยความช่วยเหลือของคำสั่งที่ระบุด้านล่าง:
เวลาเริ่มต้น npm - - และ
การดำเนินการคำสั่งนี้จะสร้าง “ แพ็คเกจ.json ” ในไดเร็กทอรีปัจจุบันดังต่อไปนี้:
ตอนนี้ให้ติดตั้ง “ โหนดดึงข้อมูล ” โมดูลโดยใช้ cmdlet ต่อไปนี้:
โหนดการติดตั้ง npm - - ดึง
อย่างไรก็ตาม หากต้องการติดตั้งเวอร์ชันโมดูลเป้าหมาย ให้ใช้คำสั่งต่อไปนี้:
โหนดการติดตั้ง npm - - ดึง@ 2.0ในกรณีนี้ “ 2.0 ” เวอร์ชันของโมดูลจะถูกติดตั้ง
บันทึก: ก่อนที่จะดำเนินการตามตัวอย่าง ให้สร้าง ' ดัชนี.mjs ” ในพื้นที่ทำงานที่จะใช้ในการใช้งานฟังก์ชันต่างๆ
ตัวอย่างที่ 1: ส่งคำขอรับผ่านการดึงข้อมูลโหนด
“ โหนดดึงข้อมูล ” สามารถใช้โมดูลเพื่อรับข้อความจากเว็บเซิร์ฟเวอร์หรือข้อมูลผ่าน Rest API
ตัวอย่างโค้ดด้านล่างเขียนด้วยการสร้าง “ ดัชนี.mjs ” สร้างคำขอรับแบบง่ายๆ ไปยังหน้าแรกของ YouTube:
นำเข้า ดึง จาก 'การดึงโหนด' ;ดึง ( 'https://youtube.com' )
. แล้ว ( ความละเอียด => ความละเอียด ข้อความ ( ) )
. แล้ว ( ข้อความ => คอนโซล บันทึก ( ข้อความ ) ) ;
ในบรรทัดโค้ดเหล่านี้:
- โหลด “ โหนดดึงข้อมูล ” และเรียกข้อมูลหน้าแรกของ YouTube ผ่าน URL ที่ระบุซึ่งมีการร้องขอ HTTP
- หลังจากนั้นให้โซ่ “ แล้ว() ” วิธีการจัดการการตอบสนองและข้อมูลจากคำขอที่ทำ
- วิธี 'then()' แบบเดิมหมายถึงกำลังรอรับการตอบกลับจากเซิร์ฟเวอร์ YouTube และแปลงเป็นรูปแบบข้อความ
- วิธีหลัง “แล้ว()” หมายถึงการรอผลลัพธ์ของการแปลงครั้งก่อนและแสดงไว้บนคอนโซล
เอาท์พุต
ตอนนี้รันโค้ดผ่าน cmdlet ต่อไปนี้:
ดัชนีโหนด มจสการดำเนินการคำสั่งข้างต้นส่งผลให้ได้รับมาร์กอัป HTML ทั้งหมดของหน้าแรกของ YouTube ที่แสดงบนคอนโซล:
ตัวอย่างที่ 2: ดึงข้อมูล JSON จาก Rest API
ตัวอย่างนี้ใช้ “ โหนดดึงข้อมูล ” เพื่อรับข้อมูลปลอมผ่านทาง JSONPlaceholder RestAPI เป็นเช่นนั้นเอง” ดึงข้อมูล() ” วิธีการประกอบด้วย URL ของเซิร์ฟเวอร์และรอการตอบกลับ:
นำเข้า ดึง จาก 'การดึงโหนด' ;ดึง ( 'https://jsonplaceholder.typicode.com/users' )
. แล้ว ( ความละเอียด => ความละเอียด json.json ( ) )
. แล้ว ( json.json => {
คอนโซล บันทึก ( 'ผู้ใช้อาร์เรย์คนแรก ->' ) ;
คอนโซล บันทึก ( json.json [ 0 ] ) ;
คอนโซล บันทึก ( 'ชื่อผู้ใช้อาร์เรย์แรก ->' ) ;
คอนโซล บันทึก ( json.json [ 0 ] . ชื่อ ) ;
} )
ตามบล็อคโค้ดนี้ ให้ทำตามขั้นตอนต่อไปนี้:
- เนื้อความ HTTPS ประกอบด้วยข้อมูลที่จัดรูปแบบ JSON ซึ่งมีข้อมูลของผู้ใช้
- หลังจากนั้น “ เจสัน() ” ถูกใช้เพื่อเรียกใช้แต่ละรายการและค่าที่เกี่ยวข้อง
เอาท์พุต
ใช้ cmdlet ที่ระบุด้านล่างเพื่อรันโค้ด:
ดัชนีโหนด มจส
ตัวอย่างที่ 3: โพสต์คำขอผ่านการดึงโหนด
“ โหนดดึงข้อมูล ” โมดูลยังสามารถใช้เพื่อโพสต์คำขอแทนที่จะดึงข้อมูลเหล่านั้น ซึ่งสามารถทำได้ผ่านทาง “ ดึงข้อมูล() ” วิธีการที่มีพารามิเตอร์เพิ่มเติมเพื่อส่งคำขอ POST ไปยังเซิร์ฟเวอร์
มีหลายตัวเลือกที่สามารถจัดสรรด้วยพารามิเตอร์นี้ได้ อย่างไรก็ตาม ในกรณีนี้ “ วิธี , ' ร่างกาย ' และ ' ส่วนหัว ' จะถูกนำไปใช้. ต่อไปนี้เป็นคำอธิบายของแต่ละตัวเลือก:
- “ วิธี ตัวเลือก ” กำหนดประเภทของคำขอ HTTP เช่น “POST” ในสถานการณ์นี้
- “ ร่างกาย ” ตัวเลือกประกอบด้วยเนื้อหาของคำขอ
- “ หัวข้อ ” ตัวเลือกประกอบด้วยส่วนหัวที่จำเป็นทั้งหมด เช่น “ ชนิดของเนื้อหา ” ในสถานการณ์นี้
ตอนนี้ ไปสู่การใช้งานจริงของการส่งคำขอโพสต์โดยการผนวกรายการใหม่เข้ากับตัวยึดตำแหน่ง JSON “ ทั้งหมด '. ทำได้โดยการต่อท้ายรายการใหม่ในรายการที่มี userID เป็น '476':
นำเข้า ดึง จาก 'การดึงโหนด' ;ปล่อยให้ทุกอย่าง = {
รหัสผู้ใช้ : : 476 ,
เว็บไซต์ : : “นี่คือลินุกซ์ชินท์” ,
สมบูรณ์ : : เท็จ
} ;
ดึง ( 'https://jsonplaceholder.typicode.com/todos' , {
วิธี : : 'โพสต์' ,
ร่างกาย : : เจสัน เข้มงวด ( ทั้งหมด ) ,
ส่วนหัว : : { 'ชนิดของเนื้อหา' : : 'แอปพลิเคชัน / json' }
} ) . แล้ว ( ความละเอียด => ความละเอียด json.json ( ) )
. แล้ว ( json.json => คอนโซล บันทึก ( json.json ) ) ;
ในรหัสนี้:
- ก่อนอื่น ให้สร้างออบเจ็กต์สิ่งที่ต้องทำและแปลงเป็น JSON ในขณะที่ผนวกเข้ากับเนื้อหา
- ในทำนองเดียวกัน ให้ระบุ URL ด้วยตัวเลือกที่จำเป็นเป็น “ ดึงข้อมูล() ” พารามิเตอร์ทางเลือกของวิธีการ
- หลังจากนั้นให้สมัคร “ JSON.stringify() ” เพื่อแปลงวัตถุให้เป็นสตริงที่จัดรูปแบบ (JSON) ก่อนที่จะส่ง/ส่งไปยังเว็บเซิร์ฟเวอร์
- เดินหน้าดำเนินการผสมผสาน” แล้ว() ” เพื่อดึงข้อมูลโดยรอการตอบกลับ แปลงเป็น JSON และบันทึกลงในคอนโซล ตามลำดับ
เอาท์พุต
ดำเนินการคำสั่งที่ให้มาด้านล่างเพื่อรันโค้ด:
ดัชนีโหนด มจส
รหัสสถานะ HTTP คืออะไร
ก่อนที่จะดำเนินการตัวอย่างถัดไป ตรวจสอบให้แน่ใจว่าหากคำตอบประกอบด้วย “ 3xx รหัสสถานะ ลูกค้าจะต้องดำเนินการตามขั้นตอนเพิ่มเติม ในทำนองเดียวกัน “ 4xx ” รหัสแสดงถึงคำขอที่ไม่ถูกต้องและ “ 5xx ” รหัสสอดคล้องกับข้อผิดพลาดของเซิร์ฟเวอร์
บันทึก: “ จับ() ” ฟังก์ชั่นไม่สามารถรับมือกับกรณีที่กล่าวถึงข้างต้นได้เนื่องจากการสื่อสารของเซิร์ฟเวอร์ดำเนินไปในลักษณะที่คล่องตัว ดังนั้นแนวทางที่มีประสิทธิภาพเพื่อให้แน่ใจว่าคำขอที่ล้มเหลวส่งกลับข้อผิดพลาดคือการกำหนดฟังก์ชันที่วิเคราะห์สถานะ HTTP ของการตอบสนองของเซิร์ฟเวอร์
ตัวอย่างที่ 4: การจัดการกับข้อยกเว้นและข้อจำกัด
คำขอที่ส่งอาจมีข้อจำกัดหรือข้อยกเว้นหลายประการ เช่น ปัญหาเกี่ยวกับอินเทอร์เน็ต “ ดึงข้อมูล() ” ข้อจำกัดของฟังก์ชัน ฯลฯ ข้อยกเว้นเหล่านี้สามารถจัดการได้โดยการต่อท้าย “ จับ() ' การทำงาน:
ฟังก์ชั่น analyseStatus ( x ) {ถ้า ( x. ตกลง ) {
กลับ x
} อื่น {
โยน ใหม่ ข้อผิดพลาด ( `สถานะ HTTP ที่เกี่ยวข้องกับการตอบสนอง -> $ { x. สถานะ } ( $ { x. ข้อความสถานะ } ) ` ) ;
}
}
ดึง ( 'https://jsonplaceholder.typicode.com/MissingResource' )
. แล้ว ( วิเคราะห์สถานะ )
. แล้ว ( x => x. json.json ( ) )
. แล้ว ( json.json => คอนโซล บันทึก ( json.json ) )
. จับ ( ผิดพลาด => คอนโซล บันทึก ( ผิดพลาด ) ) ;
ในข้อมูลโค้ดนี้:
- ขั้นแรก กำหนดฟังก์ชันที่มีพารามิเตอร์ที่ระบุไว้ก่อนที่จะแยกวิเคราะห์การตอบสนองเพื่อรับมือกับข้อจำกัดที่ต้องเผชิญ
- ตอนนี้ให้รวม ' ถ้า/อื่น ” เพื่อโยนข้อผิดพลาดที่เผชิญหรือข้อจำกัดที่กำหนดเอง
- หลังจากนั้นในทำนองเดียวกันให้ใช้ ' ดึงข้อมูล() ” และวิธีการ “แล้ว()” ที่เกี่ยวข้องเพื่อดึงข้อมูลโดยรอการตอบกลับ แปลงเป็น JSON และเข้าสู่ระบบคอนโซล
- สุดท้ายนี้ ข้อยกเว้นรันไทม์สามารถจัดการได้โดยการวาง ' จับ() ” วิธีการอยู่ที่ส่วนท้ายของห่วงโซ่คำมั่นสัญญา
เอาท์พุต
สุดท้ายให้เรียกใช้ cmdlet ที่ระบุด้านล่างเพื่อเรียกใช้โค้ดและโยนข้อยกเว้นที่ต้องเผชิญ:
ดัชนีโหนด มจส
กรณีการใช้งานอื่นๆ ของ “การดึงโหนด”
“ โหนดดึงข้อมูล ”ก็สามารถนำมาใช้ทำ” คำขอ API ' หรือ ' การขูดเว็บ '. มาหารือเกี่ยวกับกรณีการใช้งานเหล่านี้โดยละเอียด
การใช้การดึงโหนดเพื่อสร้างคำขอ API
อาจจำเป็นต้องใช้ API ในหลายสถานการณ์เพื่อดึงข้อมูลเป้าหมายผ่านแหล่งแบ็คเอนด์ คำขอ HTTP สามารถมีวิธีการตรวจสอบสิทธิ์ได้หลายวิธี เช่น การใช้คีย์ API โดยที่ผู้ให้บริการ API จัดเตรียมคีย์ที่จำกัดไว้เฉพาะผู้ใช้เท่านั้น อีกวิธีหนึ่งในการป้องกัน API สามารถทำได้ผ่าน “ การรับรองความถูกต้องขั้นพื้นฐาน ” ซึ่งจะต้องส่งส่วนหัวเพื่อเรียกใช้ API
ต่อไปนี้เป็นการสาธิตแนวทางหลัง เช่น 'การรับรองความถูกต้องขั้นพื้นฐาน' ในคำขอหลังได้รับความช่วยเหลือจาก ' ดึงข้อมูล() ' วิธี:
( อะซิงโครนัส ( ) => {ค่าคงที่ x = รอรับ ( 'http://httpbin.org/post' , {
วิธี : : 'โพสต์' ,
ส่วนหัว : : {
“การอนุญาต” : : `พื้นฐาน $ { พี่ชาย ( 'รหัสผ่านการเข้าใช้งาน' ) } `
} ,
ร่างกาย : : เจสัน เข้มงวด ( {
'สำคัญ' : : 'ค่า'
} )
} ) ;
ค่าคงที่ ผลลัพธ์ = รอ x ข้อความ ( ) ;
คอนโซล บันทึก ( ผลลัพธ์ ) ;
} ) ( ) ;
ในการสาธิตข้างต้น ส่วนหัวจะถูกส่งไปพร้อมกับ “ ฐาน64 ” สตริงที่เข้ารหัสของรูปแบบ “ รหัสผ่านการเข้าใช้งาน '.
การใช้การดึงโหนดสำหรับ Web Scraping
“ การขูดเว็บ ” หมายถึงเทคนิคในการดึงข้อมูล/เนื้อหาจากไซต์และแยกวิเคราะห์ การแยกวิเคราะห์นี้สามารถทำได้ผ่านทาง “ ไชโย ' ห้องสมุด.
ด้านล่างนี้เป็นการสาธิตการดึงชื่อเพจผ่านปุ่ม “ ดึงข้อมูล() ” วิธีการ และ “ ไชโย ' ห้องสมุด:
ค่าคงที่ lib = จำเป็นต้อง ( 'เชียร์' ) ;( อะซิงโครนัส ( ) => {
ค่าคงที่ x = รอรับ ( 'https://linuxhint.com/' ) ;
ค่าคงที่ และ = รอ x ข้อความ ( ) ;
ค่าคงที่ $ = lib. โหลด ( และ ) ;
คอนโซล บันทึก ( $ ( 'ชื่อ' ) . อันดับแรก ( ) . ข้อความ ( ) ) ;
} ) ( ) ;
ตัวอย่างนี้จะดึงข้อมูลไทล์ของ ' ลินุกซ์ ” ชื่อไซต์
บทสรุป
คำขอ HTTP ใน node.js สามารถสร้างได้โดยใช้ node-fetch โดยการส่งคำขอ get การดึงข้อมูล JSON จาก REST API หรือการส่งคำขอโพสต์ นอกจากนี้ ข้อยกเว้นและข้อจำกัดสามารถจัดการได้อย่างมีประสิทธิภาพผ่านทาง “ จับ() ' การทำงาน.