이 기사에서는 nodejs에서 HTTP 요청을 시작하는 6가지 방법을 소개합니다. 물론 여기서는 얻은 데이터를 더 명확하게 인쇄하기 위해 데모로掘金社区的板块分类接口
요청하여 각 방법의 사용을 완료합니다. , 인쇄된 데이터에 색상을 추가하려면 미리 chalk库
설치해야 합니다. 자, 이제 시작하겠습니다~
Node.js는 표준 라이브러리에 https 모듈이 포함되어 있으므로 그럴 필요가 없습니다. node.js 자체가 요청을 완료할 수 있고 일부 간단한 데이터 요청을 처리하는 데 충분하기 때문에 요청을 시작하려면 라이브러리를 도입하세요.
const 분필 = require("분필") const https = 요구('https') https.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', res => { 목록 = []; res.on('데이터', 청크 => { 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
다음은 axios를 통해 Nuggets 섹션 분류를 얻는 방법에 대한 간단한 예입니다:
const chalk = require("chalk") const axios = require('axios'); axios.get('https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(res => { const {data} = res.data data.forEach(항목 => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(err => { console.log('오류: ', err.message); });
여기서 axios는 인터페이스를 요청하기 위해 get 요청을 직접 사용합니다. 구조는 promise 형식일 수도 있으며 데이터가 자동으로 json으로 구문 분석되므로 매우 간단하고 편리하다고 할 수 있습니다.
"사용자 친화적이고 강력한 Node.js HTTP 요청 라이브러리"라는 주장이. 사용자 친화성은 Promise 스타일 API 및 JOSN 처리 구성과 HTTP2 지원, 페이징 API 및 RFC 캐싱 등의 사용에 있습니다. 및 기타 기능은 대부분의 요청 라이브러리에서 사용할 수 없습니다.
다음 명령을 사용하여 got을 설치할 수 있습니다:
npm i -S [email protected]
다음은 got을 통해 Nuggets 섹션 분류를 얻는 방법에 대한 간단한 예입니다:
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(항목 => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(err => { console.log('오류: ', err.message); });
여기에서는 먼저 {responseType: 'json'}
으로 요청 인터페이스를 구성해야 하며, 그런 다음 반환된 데이터를 본문에서 얻을 수 있으며 이 역시 사용하기 매우 쉽습니다.
needle은 비교적 간단하고 컴팩트한 요청 라이브러리입니다. Promise 또는 콜백 함수 형태를 선택할 수 있으며, 반환 값이 자동으로 XML과 JSON으로 변환되므로 매우 유용합니다. .
다음 명령을 사용하여 needle을 설치할 수 있습니다:
npm i -S needle
다음은 needle을 통해 Nuggets 섹션 분류를 얻는 방법에 대한 간단한 예입니다:
const chalk = require("chalk") const needle = require('바늘'); needle.get('https://api.juejin.cn/tag_api/v1/query_category_briefs', (err, res) => { if (err) return console.log('Error: ', err.message); const {데이터} = res.body data.forEach(항목 => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) })
여기서는 콜백 함수를 사용하여 설명합니다. 성공하면 err이 null이 됩니다. 다음은 자동 변환입니다. 좋은 JSON 형식입니다.
Promise를 사용하려면 다음과 같이 작성하면 됩니다:
needle('get', 'https://api.juejin.cn/tag_api/v1/query_category_briefs') .then(함수(res) { // ... }) .catch(함수(err) { // ... });
요청 라이브러리 superagent는 2011년에 출시되었지만 동일한 API를 사용하는 Node.js 모듈로 많은 고급 HTTP 클라이언트 기능을 지원하는 진보적인 클라이언트 HTTP 요청 라이브러리입니다.
다음 명령을 사용하여 슈퍼에이전트를 설치할 수 있습니다.
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') .then(res => { const { 데이터 } = JSON.parse(res.text) data.forEach(항목 => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(err => { console.log('오류: ', err.message); });
현재 슈퍼에이전트 사용법은 axios와 매우 유사하지만 데이터를 json 형식으로 직접 처리해야 합니다.
이름에서 알 수 있듯이API가 window.fetch와 일치하고 약속 기반인 요청 라이브러리입니다. 최근 굉장히 인기가 많은데 아마도 가장 큰 문제는 v2와 v3 버전 사이에 큰 차이가 있다는 점일 것입니다. v2는 cjs 표준을 유지하는 반면, v3는 ejs 방식을 사용하므로 업그레이드 후에 문제가 발생할 수 있으므로, 이 표준을 통합하기 위해 여기서는 버전 2.6.7을 데모 버전으로 사용합니다.
다음 명령을 사용하여 node-fetch를 설치할 수 있습니다:
npm i -S [email protected]
다음은 node-fetch를 통해 Nuggets 섹션 분류를 얻는 방법에 대한 간단한 예입니다:
const chalk = require("chalk") const fetch = require("노드-페치") fetch('https://api.juejin.cn/tag_api/v1/query_category_briefs', { 메소드: 'GET' }) .then(비동기 해상도 => { { 데이터 } = res.json()을 기다립니다. data.forEach(항목 => { console.log(`${chalk.yellow.bold(item.rank)}.${chalk.green(item.category_name)}`); }) }) .catch(err => { console.log('오류: ', err.message); });
학습 부담 없이 window.fetch와 동일하게 사용되는 것을 볼 수 있습니다.
작년에 이러한 요청 라이브러리의 다운로드 추세 차트를 살펴보겠습니다.
이제 지난 1년 동안 다운로드 측면에서 node-fetch가 가장 인기가 많았고 가장 인기가 적었음을 알 수 있습니다.
별 | 버전 | 압축 해제 크기 | 생성 연도 | |
---|---|---|---|---|
axios | 91,642 | 0.26.1 | 398 kB | 2014 |
got | 10,736 | 12.0.1 | 244 kB | 2014 |
needle | 1,446 | 3.0.0 | 227 kB | 2012 |
superagent | 15,928 | 7.1.1 | 581 kB | 2011 |
node-fetch | 7 | 4343.2.3 | 106kB 2015 | 여기 |
Us 이 라이브러리의 다른 데이터를 계산해 보면 Axios의 별 수는 다른 여러 라이브러리의 수를 훨씬 초과하여 비교할 수 없을 정도로 많다고 할 수 있습니다.
이러한 요청 라이브러리는 모두 동일한 작업을 수행하며 작성 방법이 약간 다를 수 있지만 모든 길은 로마로 연결됩니다. 개인적으로는 브라우저 쪽에서 글을 자주 쓰는 편이라 axios를 애용하는 편이라 axios를 연습하든, 개발하든 우선적으로 선택하는 편이기도 합니다. 주의가 필요하고 패키지도 매우 작습니다. 실습 중에 자주 사용되지만 API는 여전히 axios만큼 사용하기 편리하지 않습니다.
실제로 이 기사에서 언급되지 않은 유명한 HTTP 요청 라이브러리가 두 개 있습니다.
하나는 ky.js인데, 이는 매우 작고 강력한 가져오기 스타일 요청 라이브러리로 주로 deno 및 최신 브라우저용으로 구축되었으므로 참여하지 않겠습니다. 당분간은 토론에 관심이 있는 학생들이 스스로 탐구할 수 있습니다.
또 하나는 request.js인데, 언급되지 않는 이유는 2020년에 완전히 지원 중단되었기 때문입니다. 혹시 사용하셨다면 프로젝트 내 요청을 다른 메소드로 대체하시면 됩니다.
이 기사는 다음에서 복제되었습니다: https://juejin.cn/post/7074749427637813284
작성자: jsmask