Node.js Express - Router 활용(모듈화하여 여러 파일로 나누고 메인에서 참조하기 +mssql 연결)

반응형

 

 

express.Router

  • 모듈형 루트 핸들러를 만들어주는 것
  • 라우터를 모듈로 만들어서 일부 루트(경로)를 정의하고 메인 앱의 경로에 라우터 모듈 마운트할 수 있도록 함

기본 구문

  • 외부 파일 : router.js
    • express.Router() : 외부에서 사용할 수 있도록 모듈화하기 위한 명령어
    • .get ~ : 라우터 객체의 루트 정의
    • module.exports : 라우터 객체 모듈화
/* router.js */
// express 객체 생성
const express = require('express');

// express router 객체 생성
const router = express.Router();

// 루트(경로) 정의
router.get('/', function (req, res) {
	res.send('Hello World!');
});

// 라우터 모듈 생성
module.exports = router;

 

  • 메인 파일 : main.js
    • 모듈 호출 및 루트 설정
      • const routeTest = require('./router') : 라우터를 모듈화한 파일의 경로와 이름 입력, 모듈화된 라우터를 변수에 저장하여 객체 생성
      • app.use('/', routeTest) : 기본 경로 지정, 예를 들어 라우터에서 정의한 경로가 /hello이고 메인 파일에서 지정한 결로가 /hello 일 경우, 기본경로/hello/hello 가 됨. 두번째 인자에는 라우터 객체 입력
/* main.js */
// express 객체 생성
const express = require('express');

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

// router 모듈 호출
// require 안에 모듈화한 파일의 이름 입력, 단 확장자 제외
// use 안에 기본 경로와 모듈 객체 정의
const routeTest = require('./router');
app.use('/', routeTest);

// 해당 포트로 서버를 시작하고 들어오는 요청 수신
app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

 

  • 터미널에서 main.js 파일 실행
node main.js

 

  • 실행 결과


데이터베이스를 포함한 라우터 모듈 생성

  • 외부 파일 : db_connector.js
// mssql 객체 생성
const sql = require('mssql');

// DB 연결 설정
const config = {
  user: '~',
  password: '~',
  server: '~',
  database: '~',
  encrypt : false, // IP address access
  trustServerCertificate: true // Trust self-signed certificate
};

// DB 연결
sql.connect(config, (err) => {
  if (err) {
    console.error('Error connecting to database:', err);
    return;
  }
  console.log('Connected to database!');
});

// DB 모듈화
module.exports = { sql };

 

  • 메인 파일 : main.js
// express 객체 생성
const express = require('express');

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

// mssql DB가 연동된 라우터 모듈을 객체화
const { sql } = require('./db_connector');

// 경로 설정, DB 값 호출
// 주의 : 모듈화된 DB 객체는 request().query()가 아닌 query() 사용
app.get('/test', (req, res) => {
    sql.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);
    });
  });

 

  • 터미널에서 main.js 파일 실행
node main.js

 

  • 실행 결과


참고

expressjs.com - Routing

반응형