Node를 사용하여 웹에서 JSON을 검색하는 세 가지 방법입니다.회사 명

표지 이미지 자막: Hunter x Hunter manga Togashi, meme-ified by yours True<삼.
최근의 기술 도전에서 나는 작은 노드를 구축하라는 요구를 받았다.우선 JSON의 js 응용 프로그램을 웹에서 검색해야 합니다.난 Node가 낯설거든.js, 나는 그 노드를 의식하지 못했다.js 이 컴퓨터는 fetch() API 를 포함하지 않습니다. 저는 이전에 전방 자바스크립트에서 그것을 사용한 적이 있습니다.
(내가 깨닫지 못한 것은fetch() 실제로는 Window interface 중의 한 방법이다. 전단이 없고 창이 없다!기술면접을 시작할 때 깨달은 난감한 일...
도전이 끝난 후, 나는 지난 주말에 코드를 재구성하고, 몇 가지 다른 방법으로 Node를 사용하여 웹에서 JSON을 검색했다.js.교란판: 노드에 http/https 모듈이 있습니다.js, 하지만 멋진 가방mimic fetch()이나 simplify request syntax 심지어 더 멀어요!
그러나 우리가 시작하기 전에 나는 기술적 도전에서 어리석게도 사용하지 않았던 도구를 소개하고 싶다. JSONView, 크롬과 파이어폭스에 사용되는 매우 편리한 웹 확장, 브라우저에서 JSON을 예쁘게 인쇄할 수 있는 도구를 소개하고 싶다.

JSONView는 브라우저에서 JSON을 인쇄할 수 있는 매우 편리한 Chrome 및 Firefox 네트워크 확장자입니다


코드 도전에서 직면한 문제 중 하나는 확장을 포함하여 컴퓨터에서 일을 할 수 없다는 것이다.다음 항목을 비교합니다.

포맷되지 않은 JSONhttps://www.reddit.com/r/popular.json
맞다

https://www.reddit.com/r/popular.json 에서 온 같은 JSON, JSONView로 예쁘게 인쇄
이외에도 특정 필드에 커서를 놓으면 해당 필드에 액세스하는 경로가 표시됩니다.

커서가 "ups"필드에 멈추고 경로가 왼쪽 아래에 표시됩니다.
이것은 분석과 접근에 필요한 데이터를 더욱 빠르고 쉽게 할 것이다.

"node fetch" 패키지를 사용하여fetch() 복사


nodefetch 패키지의 역할은 기대와 차이가 많지 않습니다. node에서 fetch () 문법을 제공합니다.js.설치하려면 npm install node-fetch 을 실행하고 코드를 다음과 같이 설정합니다.
const fetch = require('node-fetch');

let url = "https://www.reddit.com/r/popular.json";

let settings = { method: "Get" };

fetch(url, settings)
    .then(res => res.json())
    .then((json) => {
        // do something with JSON
    });
여기서 우리는 우선 require() 패키지를 가져오고 settings 변수를 만들어서 http 방법을 Get 요청으로 정의합니다.그곳에서 우리는 우리가 앞에 있는 것처럼 fetch(url, settings) 사용한다.여느 때와 마찬가지로 우리는 응답res을 JSON으로 해석하고 그것으로 우리가 해야 할 모든 일을 할 수 있다.
주의: 일부 매우 기본적인 기준 테스트를 보면 노드 획득은 본고에서 포함하는 세 가지 옵션 중 가장 빠른 것 같다.다음은 모든 사람이 시간을 계산하는 시간입니다. (단, 이것은 질문의 나머지 코드를 실행하는 것을 포함하고fetch/https/request 자체뿐만 아니라)
fetch: 0.689 seconds
https: 2.827 seconds
request: 3.65 seconds
나는 다른 사람들이 더 많은 테스트를 하고 이 점을 검증/반박하기를 바란다.만약 당신이 그 사람이라면 언제든지 평론을 발표해 주십시오.

Node에서 제공하는 http/https 모듈을 사용합니다.회사 명


노드js는 http/https 모듈을 한 쌍 첨부했는데 이 예에서 https 모듈은 Get 요청에 내장 방법을 제공했다.다음은 우리가 볼 코드입니다.
const https = require('https');

let url = "https://www.reddit.com/r/popular.json";

https.get(url,(res) => {
    let body = "";

    res.on("data", (chunk) => {
        body += chunk;
    });

    res.on("end", () => {
        try {
            let json = JSON.parse(body);
            // do something with JSON
        } catch (error) {
            console.error(error.message);
        };
    });

}).on("error", (error) => {
    console.error(error.message);
});
여기에 더 많은 일이 있다!우선, 우리는 require()를 사용하여 https 모듈을 가져옵니다.그런 다음 Get 요청을 시작하려면 https.get(url, (res) => {} ) 을 호출할 수 있습니다.그리고 리셋 주체 안에서, 우리는 먼저 빈 문자열 body 을 만들고, 응답하는 텍스트 (다시 res 를 이 문자열에 추가합니다.
여기서 우리는 몇 가지 .on 문법의 예시를 가지고 있는데, 그것은 몇 가지 다른 사건, 즉 "data", "end", "error"을 정탐할 것이다.
응답 "data" 을 만났을 때, 우리는 모든 블록을 텍스트로 body 변수에 추가합니다.응답 "end" 을 클릭하면 try / catch 문법을 사용하여 본문을 JSON으로 해석하려고 합니다. 그렇지 않으면 오류를 되돌려줍니다. 마지막으로, 우리는 초기 .on 를 위해 다른 "error" 호출을 요청합니다.
비록 내가 https.get() 요구하는 현식 오류 처리를 확실히 좋아하지만, 나는 이 문법이 매우 서투르고 지루하다는 것을 발견했다.그러나 이 모듈은 노드보다 패키지 획득이 느립니다. 위의 기준 테스트 결과를 참조하십시오.

"request" 패키지를 사용하여 문법 간소화


내가 사용하는 세 번째 전략은 요청 패키지인데, 그 목적은 노드의 문법을 간소화하는 것이다.js의 http 요청입니다.이것은 외부 패키지이기 때문에 설치https.get()부터 시작하십시오.
다음은 우리가 볼 코드입니다.
const request = require('request');

let url = "https://www.reddit.com/r/popular.json";

let options = {json: true};



request(url, options, (error, res, body) => {
    if (error) {
        return  console.log(error)
    };

    if (!error && res.statusCode == 200) {
        // do something with JSON, using the 'body' variable
    };
});
와, 정말 읽을 만하다!우리 그것을 분해합시다.다른 예시와 마찬가지로, 우리는 npm install request 가져오기 패키지를 사용하고 url 변수를 설정합니다.요청 패키지에는 멋진 require() 기능이 있습니다. 그 중에서 많은 것을 지정할 수 있습니다. 그러나 설정 options 에서 오류가 없으면 요청이 자동으로 응답하는 주체를 JSON으로 해석하고 200개의 상태 코드를 얻었다고 알려 줍니다.그래서 우리가 원하는 JSON을 방문하려면 { json: true } 변수만 사용하세요!
그러나 이런 가독성은 속도를 대가로 한다.상술한 기준 테스트 결과에 따르면 가장 느린 선택으로 막후에서 너무 많은 일이 일어났기 때문일 가능성이 높다.그러나 가독성은 일류입니다. 다른 http 요청을 설정하는 것은 이 Get 요청 예시처럼 간단합니다!

결론


이 특별한 기술적 도전은 Node를 깊이 파고들 수 있는 절호의 기회이다.js의 http 요청!지금, 너는 반드시 각종 도구를 가지고 서로 다른 상황을 만족시켜야 한다.
위에서 말한 바와 같이 나는 다른 사람이 테스트/기준 테스트를 하고 내가 얻은 속도 테스트 결과를 검증하거나 부정하기를 바란다!테스트는 나에게 있어서 비교적 새로운 것이기 때문에, 나는 다른 사람들이 어떻게 이런 방법에 대해 기준 테스트를 하는지 매우 보고 싶다.읽어주셔서 감사합니다. 아래에서 논평을 발표하는 것을 환영합니다!

좋은 웹페이지 즐겨찾기