บทความนี้จะแนะนำวิธีการต่างๆ 6 วิธีในการเริ่มต้นคำขอ HTTP ใน nodejs ที่นี่เราจะใช้วิธีต่างๆ กันโดยขอให้อิน掘金社区的板块分类接口
เป็นการสาธิต เพื่อพิมพ์ข้อมูลที่ได้รับให้ชัดเจนยิ่งขึ้น เราจำเป็นต้องติดตั้ง chalk库
ล่วงหน้าเพื่อเพิ่มสีให้กับข้อมูลที่พิมพ์ โอเค เรากำลังจะเริ่มแล้ว~
Node.js มาพร้อมกับโมดูล https ในไลบรารีมาตรฐาน ดังนั้นคุณไม่ต้อง ต้องการมันเลย แนะนำไลบรารีใด ๆ เพื่อเริ่มต้นคำขอ เนื่องจาก node.js เองก็สามารถดำเนินการให้เสร็จสิ้นได้ และเพียงพอที่จะจัดการกับคำขอข้อมูลง่ายๆ บางอย่าง
const ชอล์ก = ต้องการ ("ชอล์ก") const https = ต้องการ ('https') https.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', res => { ให้รายการ = []; res.on('data', chunk => { list.push(อัน); - res.on('end', () => { const { ข้อมูล } = JSON.parse(Buffer.concat(list).toString()); data.forEach(รายการ => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); - - }).on('ข้อผิดพลาด', ผิดพลาด => { console.log('ข้อผิดพลาด: ', err.message); });
โครงสร้างมีความซับซ้อนเล็กน้อย เนื่องจากเราต้องสร้างรายการอาร์เรย์ว่างเพื่อจัดเก็บข้อมูลคำขอ และหลังจากที่คำขอเสร็จสมบูรณ์ เราจำเป็นต้องประมวลผลข้อมูลผ่าน Buffer จากนั้นจึงแยกวิเคราะห์เป็นรูปแบบ json .
เชื่อว่าเพื่อนส่วนหน้าคุ้นเคยกับ axios เป็นไลบรารีคำขอ Promise ที่ได้รับความนิยมและได้รับความนิยมอย่างมาก สามารถใช้ได้ทั้งบนเบราว์เซอร์และไคลเอนต์ และอย่างที่เราทราบกันดีว่ายังมีฟังก์ชันที่สะดวกมาก เช่น ตัวดักฟัง และการแปลงข้อมูลอัตโนมัติเป็น json
เราสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้ง axios:
npm i -S axios
ต่อไปนี้เป็นตัวอย่างง่ายๆ ของวิธีที่เราจัดหมวดหมู่ส่วน Nuggets ผ่าน axios:
const chalk = need("chalk") const axios = ต้องการ ('axios'); axios.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(ความละเอียด => { const {data} = res.data data.forEach(รายการ => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); - - .catch(ผิดพลาด => { console.log('ข้อผิดพลาด: ', err.message); });
ในที่นี้ axios ใช้ get request เพื่อขออินเทอร์เฟซโดยตรง โครงสร้างยังสามารถอยู่ในรูปแบบของสัญญา และข้อมูลจะถูกแยกวิเคราะห์เป็น json ให้คุณโดยอัตโนมัติ ซึ่งอาจกล่าวได้ว่าง่ายและสะดวกมาก
การอ้างว่าเป็น "ไลบรารีคำขอ HTTP ของ Node.js ที่ใช้งานง่ายและมีประสิทธิภาพ" ความเป็นมิตรกับผู้ใช้นั้นอยู่ที่การใช้การกำหนดค่าการประมวลผล API สไตล์สัญญาและ JOSN และบางอย่างเช่นการสนับสนุน HTTP2, API การเพจและการแคชของ RFC และความสามารถอื่นๆ ไม่มีอยู่ในไลบรารีคำขอส่วนใหญ่
เราสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้ง got:
npm i -S [email protected]
นี่คือตัวอย่างง่ายๆ ของวิธีที่เรารับการจำแนกประเภทของ Nuggets ผ่าน got:
const chalk = need("chalk") const ได้ = ต้องการ ('ได้'); got.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', { ประเภทการตอบสนอง: 'json' - .then(ความละเอียด => { const {data} = res.body data.forEach(รายการ => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); - - .catch(ผิดพลาด => { console.log('ข้อผิดพลาด: ', err.message); });
ที่นี่ก่อนอื่นเราต้องกำหนดค่าอินเทอร์เฟซคำขอด้วย {responseType: 'json'}
จากนั้นสามารถรับข้อมูลที่ส่งคืนได้ในส่วนเนื้อหาซึ่งใช้งานง่ายมากเช่นกัน
Needle เป็นไลบรารีคำขอที่ค่อนข้างเรียบง่ายและกะทัดรัด คุณสามารถเลือกได้ตามความต้องการของคุณเอง นอกจากนี้ ค่าที่ส่งคืนจะแปลง XML และ JSON โดยอัตโนมัติซึ่งมีประโยชน์มากเช่นกัน . ของความสะดวกสบาย
เราสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้งเข็ม:
npm i -S Needle
นี่คือตัวอย่างง่ายๆ ของวิธีที่เราจัดหมวดหมู่ส่วน Nuggets ผ่านเข็ม:
const chalk = need("chalk") const เข็ม = ต้องการ ('เข็ม'); needle.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', (ผิดพลาด, ความละเอียด) => { ถ้า (ผิดพลาด) กลับ console.log('ข้อผิดพลาด: ', err.message); const {data} = res.body data.forEach(รายการ => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); - })
ที่นี่เราสาธิตการใช้ฟังก์ชันการโทรกลับ จะเห็นได้ว่ามีข้อผิดพลาดและความละเอียดที่ส่งคืน เมื่อสำเร็จ ข้อผิดพลาดจะเป็นโมฆะ เนื้อความของความละเอียดที่ส่งคืนหลังจากสำเร็จคือข้อมูลที่ร้องขอ รูปแบบ json ที่ดี
หากคุณต้องการใช้ Promise คุณสามารถเขียนดังนี้:
need('get', 'https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(ฟังก์ชั่น(res) { - - .catch (ฟังก์ชั่น (ผิดพลาด) { - });superagent ไลบรารีคำขอ
เปิดตัวค่อนข้างเร็ว ย้อนหลังไปถึงปี 2011 แต่เป็นไลบรารีคำขอ HTTP ไคลเอ็นต์แบบก้าวหน้าที่รองรับฟังก์ชันไคลเอ็นต์ HTTP ขั้นสูงมากมายด้วยโมดูล Node.js ที่มี API เดียวกัน ยังคงมีประโยชน์มาก
เราสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้ง superagent:
npm i -S superagent
นี่คือตัวอย่างง่ายๆ ของวิธีที่เรารับการจำแนกประเภทของ Nuggets ผ่าน superagent:
const chalk = need("chalk") const superagent = ต้องการ ('superagent'); superagent.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(ความละเอียด => { const { ข้อมูล } = JSON.parse (res.text) data.forEach(รายการ => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); - - .catch(ผิดพลาด => { console.log('ข้อผิดพลาด: ', err.message); });
การใช้ superagent ในปัจจุบันคล้ายกับ axios มาก แต่คุณต้องประมวลผลข้อมูลเป็นรูปแบบ json ด้วยตัวเอง
ตามชื่อที่แนะนำเป็นไลบรารีคำขอที่มี API สอดคล้องกับ window.fetch และยังเป็นไปตามสัญญาอีกด้วย มันได้รับความนิยมอย่างมากเมื่อเร็ว ๆ นี้ แต่บางทีปัญหาที่ใหญ่ที่สุดก็คือมีความแตกต่างอย่างมากระหว่างเวอร์ชัน v2 และ v3 ที่ยังคงรักษามาตรฐาน cjs ในขณะที่ v3 ใช้วิธีการ ejs ซึ่งอาจทำให้เกิดปัญหาบางอย่างหลังจากการอัปเกรด ดังนั้นใน เพื่อรวมมาตรฐานนี้เข้าด้วยกัน เราใช้เวอร์ชัน 2.6.7 ที่นี่เป็นเวอร์ชันสาธิต
เราสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้ง node-fetch:
npm i -S [email protected]
นี่คือตัวอย่างง่ายๆ ของวิธีที่เรารับการจำแนกประเภทของ Nuggets ผ่านการ node-fetch:
const chalk = need("chalk") const fetch = ต้องการ ("การดึงโหนด") fetch('https://api.juejin.cn/tag_api/v1/query_category_briefs', { วิธีการ: 'รับ' - .then(ความละเอียด async => { ให้ { data } = รอ res.json() data.forEach(รายการ => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); - - .catch(ผิดพลาด => { console.log('ข้อผิดพลาด: ', err.message); });
จะเห็นได้ว่าใช้เหมือนกับ window.fetch ทุกประการ โดยไม่มีความกดดันในการเรียนรู้ใดๆ
มาดูแผนภูมิแนวโน้มการดาวน์โหลดของไลบรารีคำขอเหล่านี้ในปีที่ผ่านมา:
ตอนนี้เราเห็นแล้วว่าการดึงโหนดได้รับความนิยมมากที่สุดและได้รับความนิยมน้อยที่สุดในแง่ของการดาวน์โหลดในปีที่ผ่านมา
เวอร์ชัน | ดาว | ที่แตกไฟล์ขนาด | ที่สร้างปี | |
---|---|---|---|---|
axios | 91,642 | 0.26.1 | 398 kB | 2014 |
ได้รับ | 10,736 | 12.0.1 | 244 kB | 2014 |
เข็ม | 1,446 | 3.0.0 | 227 kB | 2012 |
superagent | 15,928 | 7.1.1 | 581 kB | 2011 |
node-fetch | 7 | , 343.2.3 | 106 kB | 2558 | ที่นี่
เรา หลังจากนับข้อมูลอื่นๆ ของห้องสมุดเหล่านี้แล้ว จำนวนดาวของ axios อาจกล่าวได้ว่าไม่มีผู้ใดเทียบเคียงได้ ซึ่งเกินกว่าจำนวนดาวของห้องสมุดอื่นๆ หลายแห่งมาก
คำขอเหล่านี้ทั้งหมดทำสิ่งเดียวกันและสามารถเริ่มต้นคำขอ HTTP ได้ บางทีวิธีการเขียนอาจแตกต่างกันเล็กน้อย แต่ถนนทั้งหมดนำไปสู่กรุงโรม โดยส่วนตัวแล้วอาจเป็นเพราะฉันเขียนบนฝั่งเบราว์เซอร์บ่อยครั้ง ดังนั้นฉันจึงเป็นผู้ใช้ axios ที่ภักดี ไม่ว่าจะเป็นการฝึกฝนหรือการพัฒนา axios ก็เป็นตัวเลือกแรกของฉัน แน่นอนว่าการดึงข้อมูลโหนดก็ได้รับมากขึ้นเช่นกัน ความสนใจและแพ็คเกจก็เล็กมากเช่นกัน มักใช้ระหว่างการฝึกซ้อม แต่ API ยังไม่สะดวกที่จะใช้เท่ากับ axios
อันที่จริง มีไลบรารีคำขอ HTTP ที่มีชื่อเสียงสองแห่งที่ไม่ได้กล่าวถึงในบทความนี้:
ไลบรารีหนึ่งคือ ky.js ซึ่งเป็นไลบรารีคำขอรูปแบบการดึงข้อมูลขนาดเล็กมากและทรงพลัง โดยส่วนใหญ่สร้างขึ้นสำหรับ deno และเบราว์เซอร์สมัยใหม่ ดังนั้นฉันจะไม่เข้าร่วม ในระหว่างนี้ นักศึกษาที่สนใจสามารถศึกษาได้ด้วยตนเอง
อีกอันคือ request.js สาเหตุที่ไม่มีการกล่าวถึงก็คือเลิกใช้แล้วอย่างสมบูรณ์ในปี 2020 หากคุณใช้แล้ว คุณสามารถแทนที่คำขอในโปรเจ็กต์ด้วยวิธีอื่นได้
บทความนี้ทำซ้ำจาก: https://juejin.cn/post/7074749427637813284
ผู้แต่ง: jsmask