본문 바로가기
web/node.js&react

[node] api에서 json 데이터 받아오기

by 바까 2022. 8. 30.
반응형

nodeJS / postgres


간단히 node로 db 연결 후 json 데이터를 받아오면 db에 insert 되도록 구현해봤다.


1. 당연하게도 init을 먼저해준뒤

2. db 연결 

db.js

var { Client } = require('pg');

//postSql db 접속
const db = new Client({
    user: "postgres",
    host: "localhost",
    database: "test",
    password: "password",
    port: "5432"
});

db.connect(err => {
    if (err) {
        console.error('connection error', err.stack)
    } else {
        console.log('success!')
    }
});

db.end();

module.exports = db;

 

3. 필요한 모듈을 설치.

- api에서 데이터를 에러없이 받아왔다는 신호 후 db에 insert할꺼라서 async 필요

- 웹 url에 연결하기 위해 request, url 모듈 필요

const express = require('express');
const app = express();
const PORT = process.env.port || 5050;

const db = require('./db.js');

const bodyParser = require('body-parser');

app.use(bodyParser.json()); //bodyparser 사용 설정

const async = require('async')
const request = require('request');
const { resolve } = require('url');

 

4. url 요청에 필요한 데이터 코드가 필요해서 코드만 select 한 뒤 배열에 넣어줬다. (각 api 방식에 따라 다름)

app.get('/app',(req, res, next) => {
    const query = "SELECT estcd FROM estcd"

    db.query(query, (error, res) => {
        if(error) {
            console.log(error);
        } else {
            // test
            // console.log(res.rows[0].estcd);
            // cd_array.push(res.rows[0].estcd);
            for (let row of res.rows) {
                console.log(row.estcd);
                cd_array.push(row.estcd);
            }
           
        }
        console.log(cd_array);
        console.log(cd_array.length)
    }); 
});

 

5. 작성중

app.js 전체

const express = require('express');
const app = express();
const PORT = process.env.port || 5050;

const db = require('./db.js');

const bodyParser = require('body-parser');

app.use(bodyParser.json()); //bodyparser 사용 설정

const async = require('async')
const request = require('request');
const { resolve } = require('url');
var cd_array = [];


app.get('/app',(req, res, next) => {
    const query = "SELECT estcd FROM estcd"

    db.query(query, (error, res) => {
        if(error) {
            console.log(error);
        } else {
            // test
            // console.log(res.rows[0].estcd);
            // cd_array.push(res.rows[0].estcd);
            for (let row of res.rows) {
                console.log(row.estcd);
                cd_array.push(row.estcd);
            }
           
        }
        console.log(cd_array);
        console.log(cd_array.length)
    }); 
});
var result = []; 
app.get('/test', (req,res) => {
    
    if(cd_array.length > 0){    
        loop();     
        console.log(result.length)
        if(result.length == cd_array.length){
            res.send(result)
        }
    } 
    else
    {
        console.log(cd_array.length + "데이터없음");
    }
});
async function loop() {
    console.log("loop")
    for (var i in cd_array) {
        await requestTest(i);
    }
}

function requestTest(data) {
    return new Promise((resolve) => {
        var api_url = 'http://www.wamis.go.kr:8080/wamis/openapi/wkf/wkf_sestsiq_lst';
        var options = {
            uri : api_url,
            qs : {
                code : cd_array[data]
            },
            json : true
        }
        console.log(options);
        request.post(options, function (error, res, body) {
            if (!error && res.statusCode == 200) {
                /*
                console.log(body.list[0]);
                result.push(body.list[0]);
                console.log(result.length)
                resolve(result);
                */
                var estcd = body.list[0].estcd;
                var estnm = body.list[0].estnm;
                var rivnm = body.list[0].rivnm;
                var addr = body.list[0].addr;
                var rivdv = body.list[0].rivdv;
                var estlr = body.list[0].estlr;
                var estdv = body.list[0].estdv;
                var strtp = body.list[0].strtp;
                var lon = body.list[0].lon;
                var lat = body.list[0].lat;
                var tmx = body.list[0].tmx;
                var tmy = body.list[0].tmy;
                var eststs = body.list[0].eststs;
                var etcitm = body.list[0].etcitm;
                var bsncd = body.list[0].bsncd;
                
                const insert = 'INSERT INTO openapi(estcd,estnm,rivnm,addr,rivdv,estlr,estdv,strtp,lon,lat,tmx,tmy,eststs,etcitm,bsncd) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15)'
                const param = [estcd,estnm,rivnm,addr,rivdv,estlr,estdv,strtp,lon,lat,tmx,tmy,eststs,etcitm,bsncd];

                db.query(insert, param, (error, res) => {
                    if(error) {
                        console.log(error)
                    } else {
                        resolve(res)
                    }
                });

            } else {
                console.log(false)
            }
        })      
    });
}

app.listen(PORT, () => {
    console.log(`running on port ${PORT}`);
});

급히 데이터가 필요해서 만든거라 노가다스럽기도하고 조잡스러워서 아쉽다.

반응형

'web > node.js&react' 카테고리의 다른 글

react moment.js 이번주 기간, 다음주 기간 구하기  (0) 2022.04.21

댓글