Jadual Kandungan
第一种
第二种
第三种
第四种
第五种
Rumah hujung hadapan web tutorial js Node.js模拟发起http请求的方法有哪些?(方法总结)

Node.js模拟发起http请求的方法有哪些?(方法总结)

Sep 15, 2018 pm 04:21 PM
es6 javascript node.js promise

本篇文章给大家带来的内容是关于Node.js模拟发起http请求的方法有哪些?(方法总结),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

使用Node.js模拟发起http请求很常用的,但是由于Node模块(原生和第三方库)提供里面的方法都是异步,对于很多场景下应用很麻烦,不如同步来的方便。下面总结了几个常见的库API从异步转同步的几种方法。模块有:request,  request-promise , request-promise-native , request-promise-any

PS:Node的版本>=8.0.0 为了使用 Async / Await
PS: 这里加入auth 字段是为了需要用户名和密码登录的应用的请求 ,比如rabbitmq ,不需要登录的页面可以去掉这个参数。

第一种

使用原生模块 util , 利用其 promisify API , 代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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()` 写法。

Salin selepas log masuk

第二种

使用模块 request-promise-native , request-promise-native是使用 native Promise 写的,查看源码可以看到继承自 Request 模块 , 代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

// 不再写 原生示例  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();

Salin selepas log masuk

第三种

使用模块 request-promise , request-promise是基于 bluebird 写的, 查看源码可以看到继承自 Request 模块 , 代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// 不再写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();

Salin selepas log masuk

第四种

使用模块 request-promise-any , request-promise-any也是基于 request 写的, 代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// 不再写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();

Salin selepas log masuk

第五种

使用模块 bluebird , 利用其 promisifyAll API 转成Promise , 代码示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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()

Salin selepas log masuk

上面总结了5种使用方法,其实要说也不止5种了,大家根据自己需要来选择。

Atas ialah kandungan terperinci Node.js模拟发起http请求的方法有哪些?(方法总结). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 am 09:39 AM

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript

Menepati janji anda: Kebaikan dan keburukan menunaikan janji anda Menepati janji anda: Kebaikan dan keburukan menunaikan janji anda Feb 18, 2024 pm 08:06 PM

Menepati janji anda: Kebaikan dan keburukan menunaikan janji anda

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Dec 17, 2023 pm 12:09 PM

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP

Ketahui lebih lanjut tentang Promise.resolve() Ketahui lebih lanjut tentang Promise.resolve() Feb 18, 2024 pm 07:13 PM

Ketahui lebih lanjut tentang Promise.resolve()

See all articles