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.
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()` 写法。
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();
// 不再写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();
// 不再写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();
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 est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!