본문 바로가기

프로그램언어/Javascript

Infura ipfs (get) vs (cat)

반응형

Infura 서비스 중 IPFS 를 활용하면 NFT 의 metadata 를 IPFS 서버에 업로드 하는데 사용할 수 있다.

그리고 nodejs 서버를 통해 업로드한 json 데이터를 받아오기 위해 다음 코드처럼 사용하면 된다.

    const cid = 'QmTUy2xbUAjf3E79u4JztNP4JEbD8vh45kVVeM3n7rvWX8';
    const options = {
        host: 'ipfs.infura.io',
        port: 5001,
        path: '/api/v0/cat?arg='+cid,
        method: 'POST',
        // auth: process.env.INFURA_PROJECT_ID + ':' + process.env.INFURA_PROJECT_SECRET,
    };

    let req = https.request(options, (res) => {
        let body = '';
        res.on('data', function (chunk) {
            body += chunk;
        });
        res.on('end', function () {
            console.log(body);
        });
    });

    req.end();
  • 여기서 주의할 점은 path 에서 /api/v0/cat 을 사용한다는 것. /api/v0/get 주소를 사용하면 응답값에 불필요한 데이터가 함께 리턴된다.
  • get 에서는 auth 정보가 요구되지 않는다.
QmTUy2xbUAjf3E79u4JztNP4JEbD8vh45kVVeM3n7rvWX800006440000000000000000000000024142476126500166720ustar0000000000000000{
  "name": "gus"
}
  • 내가 원했던 정상적인 데이터는 다음과 같다.
{
  "name": "gus"
}

번외: https await 만들기

    let metadata;
    console.log("pjt id", process.env.INFURA_PROJECT_ID);
    const cid = 'QmTUy2xbUAjf3E79u4JztNP4JEbD8vh45kVVeM3n7rvWX8';
    const options = {
    host: 'ipfs.infura.io',
        port: 5001,
        path: '/api/v0/cat?arg='+cid,
        method: 'POST',
        // auth: process.env.INFURA_PROJECT_ID + ':' + process.env.INFURA_PROJECT_SECRET,
    };

    metadata = await new Promise((resolve, reject) => {
        let req = https.request(options, (res) => {
            let body = '';
            res.on('data', function (chunk) {
                body += chunk;
            });
            res.on('end', function () {
                resolve(JSON.parse(body));
            });
        });

        req.on('error', (err) => {
            reject(err);
        })
        req.end();
    });

번외: https 대신 fetch 사용하기

let metadata;
const cid = 'QmVX1xe3kDzMoDQBREGFVpcpcSZV52HEEzpysKFVxVkU3X';
await fetch('https://ipfs.infura.io:5001/api/v0/cat?arg='+cid, { method: 'POST'})
    .then((response) => response.json())
    .then((data) => metadata = data);
  • https 를 사용할 때보다 코드가 간단해졌다.
  • https 를 사용하는 이유는 별다른 패키지를 import 하지 않고 기본 기능만 사용할 때 쓰인다.
반응형