보통 클라이언트 단에서 fetch를 통해 api를 요청하지만 서버단에서 api를 요청해야 하는 상황에 직면했다. 방법을 stackoverflow에서 열심히 검색했고 본 문서에서 정리해 보고자 한다.
우선 node.js에서 api를 요청하기 위해서는 request 모듈이 필요하다. 설치는 npm을 통해 가능하다.
추가로 네이티브에서 개발을 진행할 경우 안드로이드는 okhttp 아이폰은 alamofire모듈을 사용할 수 있다고 한다.
npm i --s request
아래와 같은 방식으로 node.js에서 get 요청을 전송할 수 있다.
var url = `http://www.kma.go.kr/wid/queryDFS.jsp?gridx=${nx}&gridy=${ny}`;
request({url: url,method: "GET"},
하지만 위와 같은 방식은 가독성이 매우 떨어지는 코드라 추천하지 않는다.
아래 코드가 가독성이 훨씬 좋다. 위와 아래는 똑같은 결과를 내는 소스 코드이다.
const options = {
uri: "http://www.kma.go.kr/wid/queryDFS.jsp",
qs:{
gridx:nx,
gridy:ny
}
};
request(options,function(err,response,body){
//callback
})
post 방식일 경우 options 객체에 method를 추가한다.
const options = {
uri:'https://fcm.googleapis.com/fcm/send',
method: 'POST',
body: {
priority:'high',
to:...,
}
}
request.post(options, function(err,httpResponse,body){ //callback})
body: JSON.stringify(box),
를 적용하는 방법은 options에 json을 추가한다.
const options = {
uri:'https://fcm.googleapis.com/fcm/send',
method: 'POST',
body: {
priority:'high',
to:...,
}
json:true
}
request.post(options, function(err,httpResponse,body){ //callback})
header를 적용해야 하는 경우 options 탭에 headers를 추가한다.
const options = {
uri:'https://fcm.googleapis.com/fcm/send',
method: 'POST',
body: {
priority:'high',
to:...,
}
json:true,
headers: { Authorization: `key=${fcmKey}` },
}
request.post(options, function(err,httpResponse,body){ //callback})
본 문서에서는 가장 대표적인 request 모듈을 사용했지만 추가로 4가지의 방법이 더 존재한다고 한다.
HTTP – 표준 라이브러리, Axios, SuperAgent, Got이 그 방법이다. 각각의 방법을 설명하는 페이지가 있어 링크를 첨부한다.
https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html
const options = {
uri:'https://fcm.googleapis.com/fcm/send',
method: 'POST',
body: {
priority:'high',
to:...,
}
json:true
}
request.post(options, function(err,httpResponse,body){ //callback})
JSON을 POST 로 호출하는 코드 잘 썼습니다!
다만 조금 에러가 됬던 부분이 json 앞에 , 를 붙여야했었습니다.
그리고 to:..., 이 부분이 어떤 내용이 들어갈지 불명확했었습니다.
priority 도 꼭 필요한 내용으로 착각할 수 있을 것 같습니다.
JSON 바디에 들어갈 내용들이라는게 명시되어있으면 좋을 것 같습니다.
도움 받았습니다.
고맙습니다!