Heim  >  Artikel  >  Web-Frontend  >  Welche Methoden gibt es für Node.js, um http-Anfragen zu simulieren? (Zusammenfassung der Methode)

Welche Methoden gibt es für Node.js, um http-Anfragen zu simulieren? (Zusammenfassung der Methode)

不言
不言Original
2018-09-15 16:21:132193Durchsuche

In diesem Artikel erfahren Sie, mit welchen Methoden Node.js die Initiierung von HTTP-Anfragen simulieren kann. (Zusammenfassung der Methode) hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen.

Node.js wird häufig zum Simulieren der Initiierung von HTTP-Anfragen verwendet. Da die vom Node-Modul bereitgestellten Methoden (native Bibliotheken und Bibliotheken von Drittanbietern) jedoch alle asynchron sind, ist dies sehr problematisch In vielen Szenarien ist es besser, Comes bequem zu synchronisieren. Im Folgenden werden mehrere Methoden zum Konvertieren mehrerer gängiger Bibliotheks-APIs von asynchron in synchron zusammengefasst. Die Module sind: request, request-promise, request-promise-native, request-promise-any

PS: Knotenversion>=8.0.0 Um Async/Await zu verwenden
PS: Authentifizierung hinzufügen Hier ist das Feld für Anfragen von Anwendungen vorgesehen, die zum Anmelden einen Benutzernamen und ein Kennwort erfordern, z. B. Rabbitmq. Dieser Parameter kann für Seiten entfernt werden, für die keine Anmeldung erforderlich ist.

Das erste

verwendet das native Modul util und seine Promisify-API. Das Codebeispiel lautet wie folgt:

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

Das zweite

verwendet das Modul request -promise -native, request-promise-native wird mit nativem Promise geschrieben. Wenn Sie sich den Quellcode ansehen, können Sie sehen, dass er vom Request-Modul geerbt wurde. Das Codebeispiel lautet wie folgt:

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

Das dritte Typ

verwendet das Modul request-promise. Wenn Sie sich den Quellcode ansehen, können Sie sehen, dass er vom Request-Modul geerbt ist:

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

Der vierte Typ

verwendet das Modul request-promise-any, request-promise-any wird ebenfalls auf Anfrage geschrieben. Das Codebeispiel lautet wie folgt:

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

Das Fünfter Typ

verwendet das Modul bluebird und seine promisifyAll-API, um es in Promise umzuwandeln. Das Codebeispiel lautet wie folgt:

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

Das Obige fasst tatsächlich 5 Möglichkeiten zusammen, es zu verwenden Es gibt mehr als 5 Möglichkeiten, die Sie je nach Bedarf auswählen können.

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es für Node.js, um http-Anfragen zu simulieren? (Zusammenfassung der Methode). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn