node request 요청 방법 사용 하기

최근 에 node 를 사용 하여 서버 렌 더 링 을 합 니 다.중간 층 으로 백 엔 드 인 터 페 이 스 를 요청 해 야 합 니 다.서버 의 요청 을 봉인 해 야 합 니 다.다음은 request 를 어떻게 사용 하 는 지 알 아 보 겠 습 니 다.
기본 사용

const request = require('request')
이 가방 을 도입 하면 사용 할 수 있 습 니 다.가장 간단 한 사용 방법 은 request(url)입 니 다.지정 한 주소 로 get 요청 을 할 수 있 습 니 다.여기 서 우 리 는 request 가 드 러 난 것 이 바로 함수 임 을 알 수 있다.사실 그 내부 의 구 조 는 다음 과 같다.

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)
}
기본적으로 세 개의 함 수 를 받 아들 이 고 첫 번 째 매개 변수 값 이 존재 해 야 한 다 는 것 을 알 수 있 습 니 다.request 의 전송 방식 도 여러 가지 가 있 습 니 다.그 자체 가 지원 하 는 처 리 를 많이 했 습 니 다.지원 하 는 전송 매개 변수 방식 을 보 세 요.
입력 형식
url 필수,첫 번 째 매개 변수 에 따로 놓 거나 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 는 이렇게 다양한 매개 변수 방식 을 지원 합 니까?내부 의 실현 방식 을 살 펴 보 겠 습 니 다.
소스 코드
다음 코드 에서 알 수 있 듯 이 request 는 매개 변수 유형 에 대해 유형 판단 을 하여 서로 다른 합병 방식 을 사용 합 니 다.최종 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         ,          uri  
 } else if (typeof uri === 'string') {
 extend(params, {uri: uri})
 } else {
 //         url   
 extend(params, uri)
 }

 params.callback = callback || params.callback
 return params
}
상용 필드
request(options,callback)는 도 메 인 이름 부분 과 공공 부분 을 통일 적 으로 설정 하기 위해 baseUrl 을 제공 합 니 다.

//     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 서로 다른 데이터 형식의 요청 및 debug
node 서버 가 백 엔 드 를 요청 하 는 장면 을 모 의 하기 위해 두 개의 node 서 비 스 를 시작 합 니 다.하 나 는 요청 자 시 뮬 레이 션(중간 층)이 고 다른 하 나 는 백 엔 드 입 니 다.또한 postman 을 통 해 클 라 이언 트 의 요청 을 합 니 다.데이터 에 대한 검증 은 vscode 의 debug 기능 을 사용 할 수 있 고 pm2 log 를 열 어 요청 한 인 자 를 검증 할 수 있 습 니 다.
다음은 post 의 서로 다른 형식의 요청 방식 설정 을 보 겠 습 니 다.axios,fetch 와 다 릅 니 다.request 는 서로 다른 요청 방식 의 데이터 수신 필드 가 다 릅 니 다.body,form,formData 를 통 해 받 을 수 있 습 니 다.get 의 요청 은 모두 application/x-ww-form-urlencoded 형식 을 통 해 데 이 터 를 전달 하기 때문에 예 를 들 지 않 습 니 다.
application/x-www-form-urlencodedforms 을 통 해 입 참 을 받 습 니 다.방법 은 다음 과 같 습 니 다.들 어 오 는 매개 변수 대상 을 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 logdebug 정 보 를 봅 니 다.빨간색 은 중간 층 의 log 를 대표 하고 녹색 은 백 엔 드 의 log 를 대표 합 니 다.

node debug 를 사용 하여 받 은 request.body 는 백 엔 드 에서 받 은 값 request.header 는 받 은 요청 content-type 입 니 다.

입 참 을 body 필드 에 전달 합 니 다.
form-data 파일 업로드formData을 통 해 파일 을 전달 합 니 다.코드 는 다음 과 같 습 니 다.fs.createReadStream 을 사용 하여 중간 층 의 파일 을 가 져 온 다음 formData 방식 으로 백 엔 드 에 보 냅 니 다.

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)
  }
 })
 })
}
콘 텐 츠-type 이 multipart/form-data 인 백 엔 드 를 볼 수 있 습 니 다.요청 한 콘 텐 츠-type 을 수 동 으로 설정 하지 않 으 면 자동 으로 추 가 됩 니 다.

다음 코드 는 백 엔 드 local 에 받 은 파일 흐름 을 기록 합 니 다.icon-arrow.jpg 가 중간 층 에서 백 엔 드 로 성공 적 으로 전송 되 었 음 을 볼 수 있 습 니 다.

application/json
인 자 를 body 로 전달 하고 json 을 ture 로 설정 하면 요청 시 자동 으로 content-type 을 application/json 으로 설정 하고 body 에 전달 하 는 대상 을 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)
  }
 })
 })
}

header

request.post(path,{
 form:params,
 headers:{
 // 'content-type':'application/json',
 // ...       
 name:'dd',
 agent:'request'

 }
})

현재 프로 세 스 를 id 번 호 를 통 해 구분 합 니 다.

pm2 start app.js--name 요청 단 을 통 해 프로 세 스 이름 을 정의 할 수 있 습 니 다.

마지막.
reqeust 에 대해 서도 방금 사 용 했 습 니 다.좋 은 사용 사례 는 댓 글 에서 공유 할 수 있 고 최적화 할 만 한 곳 은 저 에 게 메 시 지 를 남 길 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기