Maison >interface Web >js tutoriel >Quelles sont les méthodes utilisées par Node.js pour simuler les requêtes http ? (Résumé de la méthode)

Quelles sont les méthodes utilisées par Node.js pour simuler les requêtes http ? (Résumé de la méthode)

不言
不言original
2018-09-15 16:21:132200parcourir

Ce que cet article vous apporte, c'est quelles sont les méthodes permettant à Node.js de simuler le lancement de requêtes http ? (Résumé de la méthode) a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère que cela vous sera utile.

Il est très courant d'utiliser Node.js pour simuler le lancement de requêtes http. Cependant, comme les méthodes fournies par le module Node (bibliothèques natives et tierces) sont toutes asynchrones, c'est très gênant. à appliquer dans de nombreux scénarios. Il est préférable de synchroniser Comes de manière pratique. Ce qui suit résume plusieurs méthodes permettant de convertir plusieurs API de bibliothèque courantes d'asynchrones en synchrones. Les modules sont : request, request-promise, request-promise-native, request-promise-any

PS : Node version>=8.0.0 Afin d'utiliser Async/Await
PS : Add auth ici Le champ est destiné aux demandes provenant d'applications qui nécessitent un nom d'utilisateur et un mot de passe pour se connecter, telles que RabbitMQ. Ce paramètre peut être supprimé pour les pages qui ne nécessitent pas de connexion.

Le premier

utilise le module natif util et son API promisify. L'exemple de code est le suivant :

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

Le second

utilise le. module request -promise-native, request-promise-native sont écrits en utilisant Promise native. Consultez le code source et vous pouvez voir qu'il est hérité du module Request. L'exemple de code est le suivant :

// 不再写 原生示例  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();
La troisième utilisation de

Les modules request-promise et request-promise sont écrits sur la base de bluebird. En regardant le code source, vous pouvez voir qu'il est hérité du module Request. L'exemple de code est le suivant. :

// 不再写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();
La quatrième méthode

utilise le module request-promise-any et request-promise-any sont également écrits en fonction de la requête. Les exemples de code sont les suivants :

// 不再写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();
Le cinquième type

utilise le module bluebird et utilise son API promisifyAll pour le convertir en Promise. Les exemples de code sont les suivants :

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()
Ce qui précède résume 5 façons. pour l'utiliser. En fait, il existe plus de 5 façons de choisir en fonction de vos besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn