当前位置: 首页 > 后端技术 > Node.js

Node.js教程第五篇——request

时间:2023-04-03 10:57:06 Node.js

Request是一个第三方模块,可以用来发起http或者https请求,可以理解为服务器端的ajax请求。可以用来代替简单的服务器代理,用法类似于ajax。在使用前需要先安装npminstallrequest--saveGET请请求request.get('https://cnodejs.org/api/v1/topics?page=1&limit=10',(error,response,body)=>{console.log(body)})//orrequest('https://cnodejs.org/api/v1/topics?page=1&limit=10',(error,response,body)=>{console.log(body)})多参数设置exports.get=function(url,options){options=options||{};varhttpOptions={url:url,方法:'get',超时:options.timeout||10000,标题:options.headers||default_post_headers,代理:options.proxy||'',agentOptions:agentOptions,参数:options.params||{}}if(options.userAgent){httpOptions.headers={'User-Agent':userAgents[options.userAgent],}}try{request.get(httpOptions,function(err,res,body){if(err){options.callback({status:false,error:err})}else{options.callback({status:res.statusCode==200,error:res,data:body})}}).on('error',logger.error);}catch(err){console.log('http错误');}}POST请求请求支持application/x-www-form-urlencoded和multipart/form-data实现表单上传application/x-www-form-urlencoded(URL-EncodedForms)request.post('http://service.com/upload',{form:{key:'value'}})//orrequest.post('http://service.com/upload').form({key:'value'})//orrequest.post({url:'http://service.com/upload',form:{key:'value'}},function(err,httpResponse,body){/*...*/})multipart/form-data(MultipartFormUploads)varformData={//传递一个简单的键值对my_field:'my_value',//通过Buffers传递数据my_buffer:newBuffer([1,2,3]),//通过Streams传递数据my_file:fs.createReadStream(__dirname+'/unicycle.jpg'),//传递多个值/w一个Arrayattachments:[fs.createReadStream(__dirname+'/attachment1.jpg'),fs.createReadStream(__dirname+'/attachment2.jpg')],//传递带有样式的'选项'对象的可选元数据:{value:DATA,options:OPTIONS}//用例:对于某些类型的流,您需要手动提供与“文件”相关的信息。//查看`form-data`README有关选项的更多信息:https://github.com/form-data/form-datacustom_file:{value:fs.createReadStream('/dev/urandom'),options:{filename:'topsecret.jpg',contentType:'image/jpeg'}}};request.post({url:'http://service.com/upload',formData:formData},functionoptionalCallback(err,httpResponse,body){if(err){returnconsole.error('uploadfailed:',err);}console.log('Uploadsuccessful!Serverrespondedwith:',body);});常用多参数设置exports.form_post=function(url,postdata,options){//console.log(`${moment().format()}HttpFormPost:${url}`)returnnewPromise((resolve,reject)=>{options=options||{};varhttpOptions={url:url,form:postdata,method:'post',timeout:options.timeout||3000,headers:options.headers||default_post_headers,proxy:options.proxy||'',agentOptions:agent选项};request(httpOptions,function(err,res,body){if(err){reject(err);}else{if(res.statusCode==200){resolve(body);}else{reject(res.statusCode);}}}).on('error',logger.error);});};流request('http://img.zcool.cn/community/018d4e554967920000019ae9df1533.jpg@900w_1l_2o_100sh.jpg').pipe(fs.createWriteStream('test.png'))request('https://cnodejs.org/api/v1/topics?page=1&limit=10').pipe(fs.createWriteStream('cnodejs.json'))