반응형
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 |
---|
댓글