Node.js Express - MSSQL DB 연동하기, GET 방식으로 DB 값 불러오기

반응형

 

mssql 패키지 설치

  • 터미널에서 아래의 명령어 입력
npm install mssql

 

  • 아래와 같이 출력되면 설치 성공


express와 mssql 패키지 객체화

// express 프레임워크 객체 생성
const express = require('express');

// mssql 프레임워크 객체 생성
const sql = require('mssql');

// express의 새 인스턴스 할당
const app = express();

// express 서버 시작
app.listen(3000, () => {
  console.log('Express server listening on port 3000');
});

MSSQL DB 연결 설정하기

// SQL 접속 설정
const pool = new sql.ConnectionPool({
  user: 'sa', // DB 사용자 이름
  password: '1234', // DB 사용자의 암호
  server: 'localhost', // DB 서버 주소, localhost : 로컬호스트
  database: 'EunbyeolLocalTestDB', // DB의 데이터베이스 이름
  options: {
  	encrypt : false, // DB 서버 주소가 IP일 경우 에러 방지
    trustServerCertificate: true // 자체 신뢰 서버 인증
  },
});

MSSQL DB 접속 확인

// 데이터베이스 연결
pool.connect((err) => {
  // 연결이 안될 경우 에러 내용 콘솔에 출력
  if (err) {
    console.error('Error connecting to database:', err);
    return;
  }
  // 연결에 성공할 경우 연결 성공 메시지 콘솔에 출력
  console.log('Connected to database!');
});

 

  • 터미널에서 파일 실행
    • 위의 소스 코드가 포함된 파일을 mssql_db_connector.js 로 정의

  • MSSQL DB 연결 성공

DB의 값 불러오기(GET)

  • MSSQL의 테이블 셀렉트하기
// 해당 경로(/users) 진입시 특정 쿼리를 실행하여 DB 결과 반환
app.get('/users', (req, res) => {
  // MSSQL 쿼리 실행
  pool.request().query('SELECT * FROM testTable', (err, result) => {
    // 쿼리 실행 실패시
    if (err) {
      console.error('Error executing query:', err);
      res.status(500).send('Error executing query');
      return;
    }
    // 쿼리 실행 성공시 결과 출력
    res.json(result.recordset);
  });
});

 

  • MSSQL) 테이블(testTable) 조회 결과 

 

  • 실제 화면
    • 경로 : 기본경로/users


특정 DB의 값 불러오기(GET)

  • 위의 소스 코드를 응용하여 쿼리 스트링으로 값을 전달받아 특정 값만 출력해보기
// 해당 경로(/users) 진입시 특정 쿼리를 실행하여 DB 결과 반환
app.get('/users', (req, res) => {

  // 기본 쿼리문 정의
  let sqlQuery = "SELECT * FROM testTable"

  // 쿼리 스트링으로 값 전달 받기, 'name'이라는 키의 값을 name 상수에 입력
  const { name } = req.query
  
  // 만약 쿼리 스트링 값이 존재하면 쿼리문 변경
  if (name != null) { sqlQuery += " where username='" + name + "'" }
  
  // MSSQL 쿼리 실행
  pool.request().query(sqlQuery, (err, result) => {
    // 쿼리 실행 실패시
    if (err) {
      console.error('Error executing query:', err);
      res.status(500).send('Error executing query');
      return;
    }
    // 쿼리 실행 성공시 결과 출력
    res.json(result.recordset);
  });
});

 

  • 쿼리 스트링으로 유저의 이름을 넘겨줄 경우
    • 입력한 유저의 정보만 출력

 

  • 쿼리 스트링 없이 GET 요청을 할 경우
    • 전체 유저의 정보 출력


전체 소스 코드

  • mssql_dbConnector.js
const express = require('express');
const sql = require('mssql');

const app = express();

// Create a SQL Server connection pool
const pool = new sql.ConnectionPool({
  user: 'sa',
  password: '1234',
  server: '192.168.~~.~~',
  database: 'EunbyeolLocalTestDB',
  options: {
    encrypt : false, // IP address access
    trustServerCertificate: true // Trust self-signed certificate
  },
});

// Connect to the database
pool.connect((err) => {
  if (err) {
    console.error('Error connecting to database:', err);
    return;
  }
  console.log('Connected to database!');
});

// Set up an endpoint to query the database
app.get('/users', (req, res) => {

    let sqlQuery = "SELECT * FROM testTable"

    const { name } = req.query

    if (name != null) { sqlQuery += " where username='" + name + "'" }

    console.log(sqlQuery)

    pool.request().query(sqlQuery, (err, result) => {
    if (err) {
        console.error('Error executing query:', err);
        res.status(500).send('Error executing query');
        return;
    }
    res.json(result.recordset);
    });
});

// Start the Express server
app.listen(3000, () => {
  console.log('Express server listening on port 3000');
});

참고

expressjs.com - Express 데이터베이스 통합 (MySQL과 코드 동일)

반응형