تقدم هذه المقالة 6 طرق مختلفة لبدء طلبات HTTP في العقدة. وسنكمل هنا استخدام كل طريقة مختلفة عن طريق طلب掘金社区的板块分类接口
كعرض توضيحي بالطبع، وذلك لطباعة البيانات التي تم الحصول عليها بشكل أكثر وضوحًا ، نحتاج إلى تثبيت chalk库
مسبقًا لإضافة لون إلى البيانات المطبوعة، حسنًا، نحن على وشك البدء ~
تأتي Node.js مع وحدة https في المكتبة القياسية، لذلك لا تفعل ذلك. في حاجة إليها على الإطلاق، قم بتقديم أي مكتبة لبدء الطلبات، لأن Node.js نفسها يمكنها إكمالها، وهي أكثر من كافية للتعامل مع بعض طلبات البيانات البسيطة.
طباشير ثابت = يتطلب ("الطباشير") const https = يتطلب ('https') https.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', res => { اسمحوا القائمة = []؛ res.on('بيانات', قطعة => { list.push(chunk); }); res.on('end', () => { const { data } = JSON.parse(Buffer.concat(list).toString()); data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }); }).on('خطأ'، يخطئ => { console.log('خطأ:', err.message); });
إنها معقدة بعض الشيء من حيث البنية، لأننا نحتاج إلى إنشاء قائمة مصفوفات فارغة لتخزين مجموعة بيانات الطلب، وبعد اكتمال الطلب، نحتاج إلى معالجة البيانات من خلال Buffer ثم تحليلها إلى تنسيق json. .
يعتقدأن أصدقاء الواجهة الأمامية على دراية بـ axios وهي مكتبة طلبات الوعد المشهورة جدًا. يمكن استخدامه على كل من المتصفح والعميل، وكما نعلم جميعًا، فهو يحتوي أيضًا على وظائف مريحة للغاية مثل الاعتراضات وتحويل البيانات تلقائيًا إلى json.
يمكننا استخدام الأمر التالي لتثبيت axios:
npm i -S axios
فيما يلي مثال بسيط لكيفية الحصول على تصنيف قسم Nuggets من خلال axios:
const chalk = require("chalk") const axios = require('axios'); axios.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .ثم(الدقة => { const {data} = res.data data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(يخطئ => { console.log('خطأ:', err.message); });
هنا يستخدم Axios طلب الحصول مباشرة لطلب الواجهة، ويمكن أيضًا أن تكون البنية في شكل وعد، ويتم تحليل البيانات تلقائيًا إلى json، وهو أمر بسيط ومريح للغاية.
على ادعاءات بأنها "مكتبة طلبات Node.js HTTP سهلة الاستخدام وقوية". وتكمن سهولة الاستخدام في استخدامها لواجهة برمجة تطبيقات Promise-style وتكوين معالجة JOSN، وبعضها مثل دعم HTTP2 وواجهة برمجة تطبيقات الترحيل والتخزين المؤقت لـ RFC. والإمكانيات الأخرى غير متوفرة في معظم مكتبات الطلبات.
يمكننا استخدام الأمر التالي لتثبيت got:
npm i -S [email protected]
فيما يلي مثال بسيط لكيفية الحصول على تصنيف قسم Nuggets من خلال got:
const chalk = require("chalk") const got = require('got'); got.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', { نوع الاستجابة: "json" }) .ثم(الدقة => { const {data} = res.body data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(يخطئ => { console.log('خطأ:', err.message); });
هنا نحتاج أولاً إلى تكوين واجهة الطلب باستخدام {responseType: 'json'}
، ومن ثم يمكن الحصول على البيانات التي يتم إرجاعها في النص، وهو أيضًا سهل الاستخدام للغاية.
هي مكتبة طلبات بسيطة ومضغوطة نسبيًا، ويمكن أن تكون في شكل وظيفة Promise أو رد الاتصال، ويمكنك اختيارها وفقًا لعاداتك الخاصة، علاوة على ذلك، ستقوم قيمة الإرجاع الخاصة بها تلقائيًا بتحويل XML وJSON، وهو أمر مفيد جدًا أيضًا من الراحة.
يمكننا استخدام الأمر التالي لتثبيت الإبرة:
npm i -S Needle
فيما يلي مثال بسيط لكيفية الحصول على تصنيف قسم الناغتس من خلال الإبرة:
const chalk = require("chalk") إبرة ثابتة = تتطلب('إبرة'); Needle.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', (err, res) => { إذا (أخطأ) قم بإرجاع console.log('خطأ:', err.message); const {data} = res.body data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) })
نوضح هنا استخدام وظيفة رد الاتصال، ويمكن ملاحظة أنه تم إرجاع الأخطاء والدقة. عند النجاح، يكون نص الدقة الذي تم إرجاعه هو البيانات المطلوبة. تنسيق جيسون جيد.
إذا كنت تريد استخدام Promise، فيمكنك الكتابة على النحو التالي:
Needle('get', 'https://api.juejin.cn/tag_api/v1/query_category_briefs') .ثم (وظيفة (الدقة) { // ... }) .قبض (وظيفة (خطأ) { // ... });تم إصدار Superagent لمكتبة طلبات
في وقت مبكر جدًا، ويعود تاريخها إلى عام 2011، ولكنها مكتبة طلبات HTTP تقدمية للعميل تدعم العديد من وظائف عميل HTTP المتقدمة مع وحدة Node.js مع نفس واجهة برمجة التطبيقات (API).
يمكننا استخدام الأمر التالي لتثبيت العامل الفائق:
npm i -S superagent
فيما يلي مثال بسيط لكيفية الحصول على تصنيف قسم Nuggets من خلال العامل الفائق:
const chalk = require("chalk") const superagent = require('superagent'); superagent.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .ثم(الدقة => { const { data } = JSON.parse(res.text) data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(يخطئ => { console.log('خطأ:', err.message); });
استخدام الوكيل الفائق الحالي مشابه جدًا لاستخدام axios، لكنك تحتاج إلى معالجة البيانات بتنسيق json بنفسك.
كما يوحي الاسم، فإنهي مكتبة طلبات تتوافق واجهة برمجة التطبيقات (API) الخاصة بها مع window.fetch وتعتمد أيضًا على الوعد. لقد حظي بشعبية كبيرة مؤخرًا، ولكن ربما تكون المشكلة الأكبر هي أن هناك فرقًا كبيرًا بين إصداريه v2 وv3، حيث يحتفظ الإصدار v2 بمعيار cjs، بينما يستخدم الإصدار v3 طريقة ejs، مما قد يسبب بعض المشاكل بعد الترقية، لذلك في من أجل توحيد هذا المعيار، يتم استخدام الإصدار 2.6.7 هنا كإصدار توضيحي.
يمكننا استخدام الأمر التالي لتثبيت عقدة الجلب:
npm i -S العقدة [email protected]
فيما يلي مثال بسيط لكيفية الحصول على تصنيف قسم الناغتس من خلال جلب العقدة:
const chalk = require("chalk") جلب const = يتطلب ("جلب العقدة") جلب('https://api.juejin.cn/tag_api/v1/query_category_briefs', { الطريقة: "الحصول على" }) .ثم (الدقة غير المتزامنة => { دع { البيانات } = في انتظار res.json () data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(يخطئ => { console.log('خطأ:', err.message); });
يمكن ملاحظة أنه يتم استخدامه تمامًا مثل window.fetch، دون أي ضغط تعليمي.
، دعونا نلقي نظرة على مخطط اتجاه التنزيل لمكتبات الطلبات هذه في العام الماضي:
يمكننا الآن أن نرى أن Node-fetch كان الأكثر شيوعًا وأن Needle هو الأقل شيوعًا من حيث التنزيلات خلال العام الماضي.
إصدار | النجوم | حجم | الإنشاء سنوات | |
---|---|---|---|---|
axios | 91,642 | 0.26.1 | 398 كيلو بايت | 2014 |
حصلت على | 10,736 | 12.0.1 | 244 كيلو بايت | 2014 |
إبرة | 1,446 | 3.0.0 | 227 كيلو بايت | 2012 |
وكيل فائق | 15,928 | 7.1.1 | 581 كيلو بايت | 2011 |
عقدة جلب | 7 | ، 4343.2.3 | 106 كيلو بايت | 2015 | هنا
بعد إحصاء بعض البيانات الأخرى لهذه المكتبات، يمكن القول أن عدد نجوم المحاور لا مثيل له، ويتجاوز بكثير عدد العديد من المكتبات الأخرى.
مكتبات الطلبات هذه، جميعها تفعل نفس الشيء ويمكنها بدء طلبات HTTP. ربما تختلف طرق الكتابة قليلاً، لكن كل الطرق تؤدي إلى روما. من الناحية الشخصية، قد يكون ذلك لأنني غالبًا ما أكتب من جانب المتصفح، لذلك أنا مستخدم مخلص لـ axios سواء أكان ذلك للتدرب أو تطوير axios، فهو خياري الأول بالطبع، كما أن جلب العقدة يتلقى المزيد والمزيد الاهتمام، والحزمة أيضًا صغيرة جدًا، وغالبًا ما يتم استخدامها أثناء التدريب، لكن واجهة برمجة التطبيقات (API) لا تزال غير ملائمة للاستخدام مثل المحاور.
في الواقع، هناك مكتبتان مشهورتان لطلبات HTTP لم يتم ذكرهما في هذه المقالة:
إحداهما ky.js، وهي مكتبة طلبات صغيرة جدًا وقوية على طراز الجلب، وهي مصممة بشكل أساسي لمتصفحات دينو والمتصفحات الحديثة، لذا لن أشارك فيه للمناقشة في الوقت الحالي، يمكن للطلاب المهتمين استكشافه بأنفسهم.
والآخر هو request.js والسبب في عدم ذكره هو أنه تم إهماله بالكامل في عام 2020. إذا كنت قد استخدمته، فيمكنك استبدال الطلب في المشروع بطرق أخرى.
هذه المقالة مستنسخة من: https://juejin.cn/post/7074749427637813284
المؤلف: jsmask