В этой статье представлены 6 различных методов инициации HTTP-запросов в nodejs. Здесь мы завершим использование каждого метода, запросив в качестве демонстрации掘金社区的板块分类接口
. Конечно, для более четкой распечатки полученных данных. , нам нужно заранее установить chalk库
чтобы добавить цвет к печатным данным. Хорошо, мы собираемся начать ~
Node.js поставляется с модулем https в стандартной библиотеке, поэтому вам не нужно этого делать. оно вообще нужно. Введите любую библиотеку для инициации запросов, потому что node.js сам может это выполнить, и этого более чем достаточно для обработки некоторых простых запросов данных.
const chalk = require("мел") const https = требуется('https') https.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', res => { пусть список = []; res.on('data', chunk => { список.push(кусок); }); res.on('end', () => { const {данные} = 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. Это очень популярная библиотека запросов Promise. Его можно использовать как в браузере, так и в клиенте, и, как мы все знаем, он также имеет очень удобные функции, такие как перехватчики и автоматическое преобразование данных в 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') .then(res => { const {данные} = res.data data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(ошибка => { console.log('Ошибка: ', err.message); });
Здесь axios напрямую использует запрос get для запроса интерфейса. Структура также может быть в виде обещания, и данные автоматически анализируются в json, что можно назвать очень простым и удобным.
заявлено как «удобная и мощная библиотека HTTP-запросов Node.js». Удобство для пользователя заключается в использовании API в стиле Promise и конфигурации обработки JOSN, а также в некоторых из них, таких как поддержка HTTP2, API подкачки и кэширование 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' }) .then(res => { const {данные} = res.body data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(ошибка => { console.log('Ошибка: ', err.message); });
Здесь нам сначала нужно настроить интерфейс запроса с помощью {responseType: 'json'}
, а затем возвращаемые данные можно будет получить в теле, что тоже очень просто в использовании.
Needle — это относительно простая и компактная библиотека запросов. Она может быть в форме функции Promise или обратного вызова. Вы можете выбрать ее в соответствии со своими привычками. Более того, ее возвращаемое значение будет автоматически конвертировать XML и JSON, что также очень полезно. . удобства.
Мы можем использовать следующую команду для установки Needle:
npm i -S Needle
Вот простой пример того, как мы получаем классификацию разделов Nuggets с помощью Needle:
const chalk = require("chalk") const игла = требуется ('игла'); игла.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', (ошибка, разрешение) => { if (err) return console.log('Error: ', err.message); const {данные} = res.body data.forEach(item => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) })
Здесь мы демонстрируем использование функции обратного вызова. Видно, что возвращаются err и res. В случае успеха err имеет значение null. Тело res, возвращаемое после успеха, представляет собой запрошенные данные. Хороший формат JSON.
Если вы хотите использовать Promise, вы можете написать так:
Needle('get', 'https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(function(res) { // ... }) .catch(функция(ошибка) { // ... });Библиотека запросов
была выпущена довольно рано, еще в 2011 году, но это прогрессивная клиентская библиотека HTTP-запросов, которая поддерживает множество расширенных клиентских функций HTTP с модулем Node.js с тем же API.
Для установки суперагента мы можем использовать следующую команду:
npm i -S superagent
Вот простой пример того, как мы получаем классификацию разделов Nuggets через суперагент:
const chalk = require("chalk") const superagent = require('суперагент'); superagent.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(res => { const {данные} = 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, тогда как версия 3 использует метод ejs, что может вызвать некоторые проблемы после обновления. Чтобы унифицировать этот стандарт, мы используем версию 2.6.7 в качестве демонстрационной версии.
Мы можем использовать следующую команду для установки node-fetch:
npm i -S [email protected]
Вот простой пример того, как мы получаем классификацию разделов Nuggets с помощью node-fetch:
const chalk = require("chalk") const fetch = require("выборка узла") fetch('https://api.juejin.cn/tag_api/v1/query_category_briefs', { метод: «ПОЛУЧИТЬ» }) .then(асинхронное разрешение => { let {данные} = ожидайте 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 — наименее популярным с точки зрения загрузок за последний год.
Версия | Stars | Размер в распакованном виде | Годы создания | |
---|---|---|---|---|
axios | 91 642 | 0.26.1 | 398 КБ | 2014 г. |
получено | 10 736 | 12.0.1 | 244 КБ | 2014 г. |
Needle | 1 446 | 3.0.0 | 227 КБ | 2012 г. |
superagent | 15 928 | 7.1.1 | 581 КБ | 2011 |
node-fetch | 7 | , 4343.2.3 | 106 Кб | 2015 | Здесь
Нас. После подсчета некоторых других данных этих библиотек можно сказать, что количество звезд аксиоса не имеет себе равных и намного превышает количество звезд в нескольких других библиотеках.
Все эти библиотеки запросов делают одно и то же и могут инициировать HTTP-запросы. Возможно, методы написания немного отличаются, но все дороги ведут в Рим. Лично говоря, это может быть потому, что я часто пишу на стороне браузера, поэтому я являюсь постоянным пользователем axios. Независимо от того, практикуюсь ли я или разрабатываю axios, это мой первый выбор. Конечно, выборка узлов также получает все больше и больше. внимание, да и пакет очень маленький. Часто используется на практике, но API все равно не так удобно использовать, как axios.
На самом деле, есть две известные библиотеки HTTP-запросов, не упомянутые в этой статье:
одна — ky.js, очень маленькая и мощная библиотека запросов в стиле выборки. Она в основном создана для deno и современных браузеров, поэтому я не буду участвовать. В настоящее время в нем обсуждается заинтересованные студенты, которые могут изучить его самостоятельно.
Другой — request.js. Причина, по которой он не упоминается, заключается в том, что он полностью устарел в 2020 году. Если вы его использовали, вы можете заменить запрос в проекте другими методами.
Эта статья воспроизведена по адресу: https://juejin.cn/post/7074749427637813284
Автор: jsmask