본문 바로가기
Programming/Javascript

서버리스 앱만들기 - 2.Node 서버(Qoddi)에서 PostgresqlDB(CockroachDB) 데이터 읽어오기

by Wilkyway 2023. 5. 20.
반응형

제목이 참 힘드네요...

 

데이터는 적당히 입력이 되었다고 하면, Node(Express)를 통해서 데이터를 넘겨주는 서버를 만들어보겠습니다.

1 .env 파일

CockroachDB연결정보는 사이트에서 제공하는 connection string을 그대로 붙이는게 편리합니다. 비밀번호도 찾아서 잘 넣어주시구요.

PORT=3000
NODE_ENV='development'
SECRET=mysecretkeytest
COCKROACHDB_CONNECT_URL='postgresql://<유저아이디>:<비밀번호>@wind-raccoon-4725.8nk.cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full'

 

2. postRoute.js

Connection String에 정의된대로 연결하니 오히려 더 깔끔한 것 같네요.

import express from 'express';
import pg from 'pg';
import dotenv from 'dotenv';
import bodyParser from 'body-parser'

dotenv.config();
const { COCKROACHDB_CONNECT_URL } = process.env;

const router = express.Router();
router.use(express.json());

const client = new pg.Client(COCKROACHDB_CONNECT_URL);

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


// 전체 리스트 읽기
router.get('/', (req, res) => {
  // res.send('hello');
  const query = new pg.Query("SELECT * FROM MEMO_POST");
  client.query(query);

  var rows = [];
  /** 
   *  row에서 데이터 가져오고 end에서 검색할 때 발생한 각종 정보, error는 오류 발생시
   */
  query.on("row",row=>{
    rows.push(row);
  });
  query.on('end', () => {
    console.log(rows);
    console.log('query done')    
    res.send(rows);
    res.status(200).end();
  });
  query.on('error', err => {
    console.error(err.stack)
  });
});

 

3. index.js

구동을 위해 index.js의 소스코드도 올려둡니다.

import express from 'express';
import session from 'express-session';
import cookieParser from 'cookie-parser';
import dotenv from 'dotenv';
import cors from 'cors';

// import mongoose from 'mongoose';
// import auth from './routes/auth.js';
import postRoute from './routes/postRoute.js';

dotenv.config();

const app = express();

const { PORT, SECRET } = process.env;
app.set('port', PORT || 3000);

app.use(express.json());
app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser(SECRET));
app.use(session({
    resave: false,
    saveUninitialized: false,
    secret: SECRET,
    cookie: {
        httpOnly: true,
        secure: false
    }
}));

app.use(cors());  // 이걸로는 잘 안됨
app.all('/*', function(req, res, next){
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
})

app.use('/', postRoute);

app.listen(app.get('port'), ()=> {
  console.log(`http://localhost:${app.get('port')} 번 포트에서 서버 실행 중..`);
});

 

결과가 잘 나오네요^^

 

반응형

댓글