欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

node使用request請求的方法

近期使用node做服務(wù)端渲染,作為中間層需要請求后端接口,需要封裝服務(wù)端的請求,接下來來了解下如何使用 request。

創(chuàng)新互聯(lián)專注于坡頭網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供坡頭營銷型網(wǎng)站建設(shè),坡頭網(wǎng)站制作、坡頭網(wǎng)頁設(shè)計、坡頭網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造坡頭網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供坡頭網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

基本使用

const request = require('request')

引入這個包就可以開始使用了,最簡單的使用方式就是 request(url) 就可以想指定的地址發(fā)起一個 get 請求。 從這里我們可以看出 request 暴露出來的就是一個函數(shù)。其實它內(nèi)部的結(jié)構(gòu)如下

function request (uri, options, callback) {
 if (typeof uri === 'undefined') {
 throw new Error('undefined is not a valid uri or options object.')
 }

 var params = initParams(uri, options, callback)

 if (params.method === 'HEAD' && paramsHaveRequestBody(params)) {
 throw new Error('HTTP HEAD requests MUST NOT include a request body.')
 }

 return new request.Request(params)
}

可以看出它默認接收三個函數(shù),并且第一個參數(shù)值必須存在,request的傳參方式也有很多種,本身做了很多支持的處理,來看看它支持的傳參數(shù)方式。

入?yún)⒏袷?/strong>

url 必填,可以單獨放在第一個參數(shù),或者作為 option 的屬性之一。其他都是可選。

// 方式一
request(url,options,callback)
// 方式二
let options = {
 url // 必填
}
request(options,callback)

簡寫方式

// 方式一
request.get(url,options,callback)
// 方式二
let options = {
 url // 必填
}
request.get(options,callback)

// 方式一
request.post(url,options,callback)
// 方式二
let options = {
 url
}
request.post(options,callback)

為啥 request 支持這么多種傳參數(shù)方式。來看看它內(nèi)部的實現(xiàn)方式

源碼

下面代碼可以看出,request 對參數(shù)類型進行類型判斷來采用不同的合并方式,最終 return 的params要求就是要包含url請求地址。

function initParams (uri, options, callback) {
 // 處理沒有傳 options 的情況
 if (typeof options === 'function') {
 callback = options
 }
 var params = {}
 if (typeof options === 'object') {
 extend(params, options, {uri: uri})
 // 傳遞的 url 最終也會被合并到 pramas 上
 // 并且如果你在 options 傳遞了 uri 會被第一參數(shù)覆蓋,優(yōu)先級以 第一個入?yún)ri為準
 } else if (typeof uri === 'string') {
 extend(params, {uri: uri})
 } else {
 // 處理第一參數(shù)不是url的情況
 extend(params, uri)
 }

 params.callback = callback || params.callback
 return params
}

常用字段

request(options,callback) 提供 baseUrl 來統(tǒng)一設(shè)置域名部分及公共部分。

// 定義了 baseUrl 后只需要傳遞接口 api 即可
function fetchPost(path,params){
 return new Promise( (resolve,reject)=>{
 request.post(path,{
  baseUrl:"http://localhost:9000/react/",
 },function(err, httpResponse, body){
  if(err){
  reject(err)
  }else{
  resolve(body)
  }
 })
 })
}
// 使用,只傳遞了接口部分最終會拼接成 http://localhost:9000/react/c-request
router.get('/c-request',async ctx=>{
 let res = await fetchPost('request-header',{value:1,name:'dd'})
 ctx.body = res
})

reqeust 不同數(shù)據(jù)類型的請求及 debug

為了模擬node服務(wù)端請求后端的場景,啟動兩個node服務(wù) ,一個作為請求方模擬(中間層),另一個作為后端。另外通過 postman 來發(fā)起客戶端的請求。關(guān)于數(shù)據(jù)的驗證可以使用 vscode 的 debug 功能 也可以開啟 pm2 log 來驗證請求的參數(shù)。

接下來看下 post 不同格式的請求方式的設(shè)置,不同與 axios , fetch 。request對于不同請求方式的數(shù)據(jù)接收的字段是不同的??梢酝ㄟ^ body、form、formData 來接收。get的請求都是通過 application/x-www-form-urlencoded 格式來傳遞數(shù)據(jù)的,所以這里暫不舉例。

application/x-www-form-urlencoded

通過 forms字段 來接收入?yún)ⅲ椒ㄈ缦?,直接將傳入的參?shù)對象傳遞給 form 即可。

function fetchPost(path,params){
 return new Promise( (resolve,reject)=>{
 request.debug = true
 request.post(path,{
  form:params
 },function(err, httpResponse, body){
  if(err){
  reject(err)
  }else{
  resolve(body)
  }
 })
 })
}

request 有個debug 模式,通過 request.debug = true 開啟,為了查看debug信息,使用 pm2 start app.js --watch 啟動項目,然后 pm2 log 來查看debug信息。紅色代表中間層的log,綠色代表后端的log

node使用request請求的方法

使用 node debug 查看接收到的 request.body是后端接收到的值 request.header是接收到的請求 content-type

node使用request請求的方法

都會將入?yún)鬟f到 body 這個字段上

form-data 文件上傳

通過 formData 來傳遞文件,代碼如下:使用 fs.createReadStream 去拿到中間層的文件,然后通過 formData 方式發(fā)送給后端。

function fetchPost(path,params){
 return new Promise( (resolve,reject)=>{
 let formData = {
  file:fs.createReadStream(__dirname+'/../static/images/icon-arrow.png')
 }
 request.debug = true
 request.post(path,{
  formData
 },function(err, httpResponse, body){
  if(err){
  reject(err)
  }else{
  resolve(body)
  }
 })
 })
}

可以看到后端接收到到 content-type 為 multipart/form-data , 我們并沒有手動的去設(shè)置請求的 content-type 會自動添加上。

node使用request請求的方法

下面代碼會將接收到到文件流寫入到后端local??梢钥吹?icon-arrow.jpg 已經(jīng)成功的從中間層發(fā)送到后端

node使用request請求的方法

application/json

將參數(shù)通過 body 傳遞,并且設(shè)置 json為ture,那么請求時會自動將 content-type 設(shè)置為 application/json 并且將傳遞給 body 的對象轉(zhuǎn)義為 JSON

function fetchPost(path,params){
 return new Promise( (resolve,reject)=>{
 request.debug = true
 console.log('*'.repeat(40));
 request.post(path,{
  baseUrl:"http://localhost:9000/react/",
  body:params,
  json:true
 },function(err, httpResponse, body){
  if(err){
  reject(err)
  }else{
  resolve(body)
  }
 })
 })
}

node使用request請求的方法

header

request.post(path,{
 form:params,
 headers:{
 // 'content-type':'application/json',
 // ... 任意其他字段
 name:'dd',
 agent:'request'

 }
})

node使用request請求的方法

通過id號來區(qū)分當前進程,

node使用request請求的方法

可以通過 pm2 start app.js --name 請求端 來定義進程名稱

node使用request請求的方法

最后

關(guān)于 reqeust 也是剛剛使用,有好的使用案例可以在評論區(qū)分享,值得優(yōu)化的地方可以留言給我。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當前文章:node使用request請求的方法
標題URL:http://aaarwkj.com/article4/iggiie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)全網(wǎng)營銷推廣、軟件開發(fā)、手機網(wǎng)站建設(shè)App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

2021久久国产综合精品青草| 久久91超碰青草在哪里看| 大龄熟妇丰满有水多毛浓| 91手机国产三级在线| 欧美日韩综合在线第一页| 免费观看国内性生活大片| 国产精品综合av一区二区国产馆| 亚洲精品在线观看日本| 亚洲成年人黄色小说网站| 亚洲新大香蕉视频在线播放| 不卡免费av在线高清| 中文字幕国产精品经典三级| 亚洲国产成在人网站天堂| 亚洲人妻不卡一区二区| 18岁以下禁看视频网站| 日韩精品人妻一区二区免| av在线观看亚洲天堂| 六月丁香花五月婷婷| 亚洲91精品一区二区三区| 精品国产一区=区三区乱码| 日韩一区中文字幕久久| 日本不卡在线观看欧美精品| 一本之道久久成人综合| 国产精品毛片在线看不卡| 国产黄片一区二区不卡| 日本中文字幕激情在线| 日本在线有码中文视频| 久久精品国产亚洲av高清一区| 激情五月婷婷久久激情| 欧美成人一区二区三区八| 我要看亚洲黄色片一级| 亚洲成人免费电影91| 在线国产视频一区二区三区| 免费观看欧美日韩论理电影| 97色伦综合在线欧美| 韩国一级av免费在线| 日本午夜诱惑在线观看| 中国女人内射69xx| 亚洲综合av伊人久久| 国产黄色片网站在线观看| 激情男女一区二区三区|