티스토리 뷰

반응형

안녕하십니까

예전에 Java에서 외부 api 호출하는 법을 작성한 적이 있습니다.

 

다른 외부 라이브러리를 호출해야 할 때 사용해야 하는데 node js에서도 호출할 수 있습니다.

node.js에서 외부 api를 request 하기 위해서는 request라는 모듈을 이용할 수 있는데,

express.js에서는 내장되어 있더라고요.

 

그리고 request의 function들은 기본적으로 callback의 구조를 띄고 있습니다.

request를 사용하는 방법은 그렇게 어렵지 않습니다.

위의 사진처럼 url, option, callback의 형태로 구조를 짜주면 됩니다.

 

그리고 callback형태 이기 때문에 비동기 처리를 해줘야 합니다.

보통 비동기 처리를 하기 위해서는 여러 가지 방법이 있지만, 제가 아는 대표적인 방법으로는 

Promise를 이용한 방법과 async/await 키워드를 이용한 방법이 있습니다.

await 키워드를 사용하면 해당 function은 promise를 반환하게 돼있습니다.

 

    getToken(): Promise<any> {
        return new Promise((resolve, reject) => {
        request.post(
            this.TOKEN_URL + "/oauth/token",
            {
            headers: {
                "content-type": "application/x-www-form-urlencoded",
                Authorization: this.HEADER
            },
            form: {
                grant_type: "client_credentials"
            }
            },
            (error, response, body) => {
            if (!error && response.statusCode.toString() === "200") {
                let tokenVO: TokenVO = new TokenVO();
                Object.assign(tokenVO, JSON.parse(body));
                resolve(tokenVO);
            }
            }
        );
        });
    } 

위의 코드는 promise를 이용하여 구현을 했습니다.

 

만약에 promise를 이용하여 구현한 위의 코드를 async/await로 구현을 해야 한다면 어떻게 해야 할까요?

구글을 검색하다가 찾은 방법으로는 두 가지의 라이브러리가 있습니다.

공식 도큐먼트에서 소개하는 라이브러리입니다. 두 개의 차이점은 상단의 promise는 bluebird 라이브러리를 이용한 promise이고 하단은 내장 promise를 이용한 라이브러리입니다. 

 

저는 내장 promise를 이용하기 위해 request-promise-native 모듈을 이용했습니다.

그리고 위의 코드를 바꾼다면 이렇게 되지 않을까요?

  async getToken(): Promise<any> {
     await request.post(
        this.TOKEN_URL + "/oauth/token",
        {
          headers: {
            "content-type": "application/x-www-form-urlencoded",
            Authorization: this.HEADER
          },
          form: {
            grant_type: "client_credentials"
          }
        },
        (error, response, body) => {
          if (!error && response.statusCode.toString() === "200") {
            let tokenVO: TokenVO = new TokenVO();
            Object.assign(tokenVO, JSON.parse(body));
            return tokenVO; // resolve
          } else {
            throw new Error(err); // reject
          }
        }
      );
   }

 

외부 api를 호출하기 위해서 request 모듈을 이용해봤습니다.

 

 

참고

https://medium.com/harrythegreat/node-js에서-request-js-사용하기-28744c52f68d

 

request

https://www.npmjs.com/package/request

반응형

'BackEnd > Node.js' 카테고리의 다른 글

node.js AWS S3 파일 업로드 (with. Typescript)  (0) 2020.02.13
type check with typescript  (0) 2019.10.23
FCM Silent Push  (0) 2019.08.17
node.js FCM으로 Push Server 구현  (2) 2019.07.21
node.js scheduler  (0) 2019.07.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함