본문 바로가기

데이터베이스(DB)/PostgreSQL
[PostgreSQL] Node.js와 연결하기

// Node.js와 PostgreSQL 연결하기


1. node.js에서 'pg' 패키지 설치

npm install pg


2. 데이터베이스 연결 정보 저장

DATABASE_USER=설정한 name
DATABASE_HOST=localhost
DATABASE_NAME=설정한 database
DATABASE_PASSWORD=설정한 password
DATABASE_PORT=5432

- 중요한 정보이기 때문에 .env 파일에 선언해서 관리한다.


3. 데이터베이스 연결 구성

import { Pool } from 'pg';

const pool = new Pool({
  user: process.env.DATABASE_USER,
  host: process.env.DATABASE_HOST,
  database: process.env.DATABASE_NAME,
  password: process.env.DATABASE_PASSWORD,
  port: parseInt(process.env.DATABASE_PORT, 10),
});


4. 데이터베이스 연결

const client = await pool.connect();


5. SQL 쿼리 실행

const result = await client.query(
  //쿼리
);
  • result.rows로 결과를 확인할 수 있다. (배열)


6. client 연결 종료

client.release();


7. client에 응답 전송

res.status(201).json(반환할객체);

import { Pool } from 'pg';

const pool = new Pool({
  user: process.env.DATABASE_USER,
  host: process.env.DATABASE_HOST,
  database: process.env.DATABASE_NAME,
  password: process.env.DATABASE_PASSWORD,
  port: parseInt(process.env.DATABASE_PORT, 10),
});

async function handler(req, res) {
  if (req.method === 'POST') {
    const { title, image, address, description } = req.body;

    try {
      const client = await pool.connect();

      const result = await client.query(
        'INSERT INTO meetup(title, image, address, description) VALUES($1, $2, $3, $4) RETURNING *',
        [title, image, address, description],
      );

      console.log(result.rows);

      client.release();

      // 응답을 클라이언트에 보냄
      res.status(201).json({ message: 'Meetup inserted!' });
    } catch (err) {
      console.error('Database connection error', err.stack);
      res.status(500).json({ message: 'Database connection failed' });
    }
  } else {
    res.setHeader('Allow', ['POST']);
    res.status(405).end(`Method ${req.method} Not Allowed`);
  }
}

※ 쿼리 작성 규칙

- SQL Inject 예방을 위해 항상 매개변수화된 쿼리를 사용해야 한다.

// 백틱 사용
const query = 'INSERT INTO users(name, tel) VALUES($1, $2) RETURNING *';
const user = ['Hana', '01012345678'];

const { rows } = await client.query(query, user);

//query 단순화
const { rows } = await client.query('INSERT INTO users(name, tel) VALUES($1, $2) RETURNING *', ['Hana', '01012345678']);


- SQL 쿼리는 단일 문자열로 작성한다.

const query = `
  SELECT * 
  FROM users 
  WHERE name = $1;
`;

'데이터베이스(DB) > PostgreSQL' 카테고리의 다른 글

[PostgreSQL] UUID 생성하기  (0) 2024.03.01
[PostgreSQL] INTERVAL  (0) 2023.11.15
스프링 부트와 PostgreSQL 연동  (0) 2023.08.14
PostgreSQL 설치 및 환경설정  (0) 2023.08.07