
บทความนี้จะแนะนำวิธีการต่างๆ 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