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 서로 다른 데이터 형식의 요청 및 debugnode 서버 가 백 엔 드 를 요청 하 는 장면 을 모 의 하기 위해 두 개의 node 서 비 스 를 시작 합 니 다.하 나 는 요청 자 시 뮬 레이 션(중간 층)이 고 다른 하 나 는 백 엔 드 입 니 다.또한 postman 을 통 해 클 라 이언 트 의 요청 을 합 니 다.데이터 에 대한 검증 은 vscode 의 debug 기능 을 사용 할 수 있 고 pm2 log 를 열 어 요청 한 인 자 를 검증 할 수 있 습 니 다.
다음은 post 의 서로 다른 형식의 요청 방식 설정 을 보 겠 습 니 다.axios,fetch 와 다 릅 니 다.request 는 서로 다른 요청 방식 의 데이터 수신 필드 가 다 릅 니 다.body,form,formData 를 통 해 받 을 수 있 습 니 다.get 의 요청 은 모두 application/x-ww-form-urlencoded 형식 을 통 해 데 이 터 를 전달 하기 때문에 예 를 들 지 않 습 니 다.
application/x-www-form-urlencoded
forms
을 통 해 입 참 을 받 습 니 다.방법 은 다음 과 같 습 니 다.들 어 오 는 매개 변수 대상 을 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 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 에 대해 서도 방금 사 용 했 습 니 다.좋 은 사용 사례 는 댓 글 에서 공유 할 수 있 고 최적화 할 만 한 곳 은 저 에 게 메 시 지 를 남 길 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Express.js에서 오류를 처리하는 간단한 방법Express에서 오류를 처리하는 여러 가지 방법이 있습니다. 이를 수행하는 일반적인 방법은 기본 익스프레스 미들웨어를 사용하는 것입니다. 또 다른 방법은 컨트롤러 내부의 오류를 처리하는 것입니다. 이러한 처리 방식...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.