Node.js가 http 요청을 시뮬레이션하는 방법은 무엇입니까? (방법 요약)

不言
풀어 주다: 2018-09-15 16:21:13
원래의
2192명이 탐색했습니다.

이 기사에서 제공하는 내용은 Node.js가 http 요청을 시뮬레이션하는 방법이 무엇인지입니다. (방법 요약)에는 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

Node.js를 사용하여 http 요청 시작을 시뮬레이션하는 것은 매우 일반적입니다. 그러나 Node 모듈에서 제공하는 메서드(네이티브 및 타사 라이브러리)는 모두 비동기식이므로 많은 시나리오에 적용하기가 매우 어렵습니다. 동기화만큼 편리하지 않습니다. 다음은 여러 공통 라이브러리 API를 비동기식에서 동기식으로 변환하는 여러 방법을 요약합니다. 모듈은 다음과 같습니다: request, request-promise, request-promise-native, request-promise-any

PS: 노드 버전 >=8.0.0 Async/Await
PS를 사용하려면: 여기에 인증 필드가 추가되어 필수입니다. Rabbitmq와 같이 비밀번호 로그인이 필요한 애플리케이션에 대한 사용자 이름 및 요청과 로그인이 필요하지 않은 페이지에서는 이 매개변수를 제거할 수 있습니다.

첫 번째

는 기본 모듈 util을 사용하고 해당 promisify API를 사용합니다. 코드 예제는 다음과 같습니다.

const request = require('request');
const util = require('util');
var url = "https://www.baidu.com/";
const getPromise = util.promisify(request.get);
// PS: 这里加入auth 字段是为了需要用户名和密码登录的应用的请求 ,比如rabbitmq ,不需要登录的页面可以去掉这个参数。

//1:  原生写法  无auth 参数
getPromise(url).then((value)=>{
    console.log("value" , value );
}).catch((err)=>{
    console.log("err" , err );
});

//2:  原生写法  有auth 参数
getPromise(url , {'auth' : {
    'user' : 'xx',
    'pass' : 'xx',
    'sendImmediately' : 'false',
}}).then((value)=>{
    console.log("value" , value );
}).catch((err)=>{
    console.log("err" , err );
});

// 第二种写法   async/await

// 个人最建议使用这种 , 只使用util 和 request 。

async function handle(){

    let result = await getPromise(url , {'auth' : {
        'user' : 'xx',
        'pass' : 'xx',
        'sendImmediately' : 'false',
    }});
    // 可以加入 try catch 捕获异常  也可以加 .catch()
    console.log("result" , result.);
}

handle();

PS: `auth` 参数的用法参考[链接][1]  , 在异步变同步中 不能使用  `request.get().auth()` 写法。
로그인 후 복사

두 번째

request-promise-native 모듈을 사용합니다. 확인해 보세요. 소스 코드는 Request 모듈에서 상속된 것을 볼 수 있습니다. 코드 예는 다음과 같습니다.

// 不再写 原生示例  then()链的那种,参考第一个示例即可
//get 请求示例   
const rpn = require('request-promise-native');  
var url = "https://www.baidu.com/";
async function useRequestPromiseNative(){
    // options 里面的参数可以去看request的源码  查看其index.d.ts 文件里面的 interface CoreOptions 里面有所有的参数。
    let options = {
        method: 'GET',
        uri: url,
        auth : {
            'user' : 'xx',
            'pass' : 'xx',
            'sendImmediately' : 'false',
        }
      };
    let  rpnbody = await rpn(options);       
    
    console.log("rpnbody" , rpnbody );
}

useRequestPromiseNative();

// post 示例 
const rpn = require('request-promise-native');
var url = "https://www.baidu.com/";
async function useRequestPromiseNative(){
    let options = {
        method: 'POST',
        uri: url,
        body: {    // 这里定义你的body参数
        }
        json: true, // 这个看你的参数而定
      };
    let  rpnbody = await rpn(options);       
    
    console.log("rpnbody" , rpnbody );
}
useRequestPromiseNative();
로그인 후 복사

세 번째 유형

은 request-promise 모듈을 사용합니다. bluebird. 소스 코드를 보면 Request 모듈에서 상속되었음을 알 수 있습니다. 코드 예는 다음과 같습니다.

// 不再写post 示例

const rp  = require('request-promise');
var url = "https://www.baidu.com/";
async function useRequestPromise(){
    let options = {
        method: 'GET',
        uri: url,
        auth : {      //可以拿掉
            'user' : 'xx',
            'pass' : 'xx',
            'sendImmediately' : 'false',
        }
      };
    let  rpbody = await rp(options);       
    console.log("rpnbody" , rpbody );
}

useRequestPromise();
로그인 후 복사

네 번째 방법

request-promise-any, request-promise-any는 요청에 따라 작성된 코드 예시는 다음과 같습니다.

// 不再写post 示例

const rpa = require('request-promise-any');
var url = "https://www.baidu.com/";
async function useRequestPromiseAny(){
    let options = {
        method: 'GET',
        uri: url,
        auth : {
            'user' : 'xx',
            'pass' : 'xx',
            'sendImmediately' : 'false',
        }
      };
    let  rpabody = await rpa(options);       
    console.log("rpabody" , rpabody );
}

useRequestPromiseAny();
로그인 후 복사

다섯 번째 방법

은 bluebird 모듈을 사용하고 promisifyAll API를 사용하여 이를 Promise로 변환합니다. 코드 예시는 다음과 같습니다.

const Promise = require('bluebird');
const request = require('request');
var url = "https://www.baidu.com/";
Promise.promisifyAll(request, { suffix: 'SC' });  //suffix 自定义 get --> getSC

async function usebluebird(){

    let result = await request.getSC(url , {'auth' : {
        'user' : 'xx',
        'pass' : 'xxx',
        'sendImmediately' : 'false',
    }});
    console.log("result" , result);
}

usebluebird()
로그인 후 복사

위에 요약되어 있습니다. 실제로는 5가지 이상의 사용 방법이 있습니다. 필요에 따라 선택할 수 있습니다.

위 내용은 Node.js가 http 요청을 시뮬레이션하는 방법은 무엇입니까? (방법 요약)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿