안녕하세요.
Node.js에서 oracledb 라이브러리를 통한 오라클 연결 방법입니다.
▼사전 준비 작업
- Node 설치
https://meyouus.tistory.com/62 참고
- Oracle Instance Client 설치
다운로드 페이지 : https://www.oracle.com/database/technologies/instant-client/downloads.html
설치 참고 : https://sora-muck.tistory.com/12
- Node 개발 편집기로 Visual Studio Code 설치
다운로드 페이지 : https://code.visualstudio.com/nodejs
설치 참고 : https://meyouus.tistory.com/21
- Request / Response 테스트를 위한 Postman 설치
다운로드 페이지 : https://www.getpostman.com/downloads/
사용법 : https://meetup.toast.com/posts/107
▼ oracledb 모듈(라이브러리) 설치
npm install oracledb --save
▼ express 모듈 설치 모듈(라이브러리) 설치
npm install express --save
▼ body-parser 모듈 설치
npm install body-parser --save
▼ dbConfig.js, app.js 파일 생성
- dbConfig.js : db 연결 정보
/* DB Info */
module.exports =
{
user : process.env.NODE_ORACLEDB_USER || "*****",
password : process.env.NODE_ORACLEDB_PASSWOR || "********",
connectString : process.env.NODE_ORACLEDB_CONNECTIONSTRING || "localhost/orcl"
}
- app.js : Oracle 연결, CURD 처리, Request / Response 처리
var oracledb = require('oracledb');
var dbConfig = require('../config/dbConfig');
// Express 기본 모듈 불러오기
var express = require('express')
, http = require('http')
, path = require('path');
// 익스프레스 객체 생성
var app = express();
// 기본 속성 설정
app.set('port', process.env.PORT || 3000);
// body-parser
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
// 라우터 객체 참조
var router = express.Router();
// Oracle Auto Commit 설정
oracledb.autoCommit = true;
// 데이터 조회 처리
router.post('/dbTestSelect', function(request, response){
oracledb.getConnection({
user : dbConfig.user,
password : dbConfig.password,
connectString : dbConfig.connectString
},
function(err, connection) {
if (err) {
console.error(err.message);
return;
}
let query =
'select * ' +
' from emp';
connection.execute(query, [], function (err, result) {
if (err) {
console.error(err.message);
doRelease(connection);
return;
}
console.log(result.rows); // 데이터
doRelease(connection, result.rows); // Connection 해제
});
});
// DB 연결 해제
function doRelease(connection, rowList) {
connection.release(function (err) {
if (err) {
console.error(err.message);
}
// DB종료까지 모두 완료되었을 시 응답 데이터 반환
console.log('list size: ' + rowList.length);
response.send(rowList);
});
}
});
// 데이터 입력 처리
router.post('/dbTestInsert', function(request, response){
oracledb.getConnection({
user : dbConfig.user,
password : dbConfig.password,
connectString : dbConfig.connectString
},
function(err, connection) {
if (err) {
console.error(err.message);
return;
}
// PrepareStatement 구조
let query =
'INSERT INTO EMP( EMPNO ,ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) ' +
'VALUES( :EMPNO ,:ENAME, :JOB, :MGR, SYSDATE, :SAL, :COMM, :DEPTNO )';
let binddata = [
Number(request.body.empno),
request.body.ename,
request.body.job,
request.body.mgr,
Number(request.body.sal),
Number(request.body.comm),
Number(request.body.deptno)
];
connection.execute(query, binddata, function (err, result) {
if (err) {
console.error(err.message);
doRelease(connection);
return;
}
console.log('Row Insert: ' + result.rowsAffected);
doRelease(connection, result.rowsAffected); // Connection 해제
});
});
// DB 연결 해제
function doRelease(connection, result) {
connection.release(function (err) {
if (err) {
console.error(err.message);
}
// DB종료까지 모두 완료되었을 시 응답 데이터 반환
response.send(''+result);
});
}
});
// 라우터 객체를 app 객체에 등록
app.use('/', router);
// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');
});
// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
▼ http://localhost:3000/dbTestSelect 실행결과
정상적으로 데이터가 조회됨
▼ http://localhost:3000/dbTestInsert 데이터 입력
'IT > NodeJS' 카테고리의 다른 글
Node mybatis-mapper를 이용한 mapper xml 개발 샘플 (0) | 2020.01.01 |
---|---|
Nodejs Express 이용한 post 호출시 request body에서 undefined 발생 해결 (3) | 2019.12.10 |
Visual Studio Code 디버깅(debugging) for Node.js (0) | 2019.12.08 |
Node.js 설치와 NPM 이해하기 (0) | 2019.12.07 |
최근댓글