node.js 오라클 접속하기...
환경은 Centos 7 , Node.js 12.14.1 , Oracle 11g 기준...
1. node.js 설치
1.1 nvm 설치
nvm 으로 설치하는 이유는 npm 으로 설치 가능한 oracleDB 요놈이 node.js 8.x 이상에서만 구동되는놈임
다른 리포지터리에서 버전명을 추가해주고 설치할 수 있지만 nvm 으로 설치하면 편안(?) 하게 설치 가능
가급적 TLS 버전 (nvm 리스트에 표시됨) 을 사용할것..!!
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
1.2 nvm 설치 후 콘솔 터미날 재시작
1.3 버전확인
nvm --version
1.4 nodejs 버전 리스트업
nvm ls-remote
1.5 node.js 설치
nvm install [리스트업 버전명]
1.6 node.js , npm 버전 확인
node -v
npm -v
2. 오라클 연동 설치
2.1 npm oracledb 설치
npm install oracledb
2.2 oracle client 설치
https://oracle.github.io/node-oracledb/INSTALL.html#prerequisites
[3.2.4항] 내용 참고
무료 oracle instant client 'basic' rpm 설치
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
에서 basic package(RPM) 버전 다운로드 후 리눅스 서버에 업로드
후에
yum install oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm
명령으로 설치
클라이언트 19.x 버전 이상이면 설정은 지가 알아서 함
2.3 connection string 설정
/usr/lib/oracle/19.5/client64/lib/network/admin 경로에 tnsnames.ora 파일 생성
// 테스트서버
TEST_SVR =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = [HOST_IP_ADDRESS ex : 127.0.0.1])(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
의 형태로 connection string 을 생성해줌...
3. node.js 접속 테스트
3.1 node.js Express App 작성
3.2 config.js 파일 하나 만들어서 다음과 같이 작성
module.exports = {
user : "user_name", // oracle server 사용자명
password : "user_passwd", // oracle server 사용자 비밀번호
connectString : "TEST_SVR", // 2.3 항목에서 설정한 TNS_NAME 설정
externalAuth : false // 외부 인증 사용여부 false 로 설정
};
3.3 node.js Express App 의 users.js 파일에 다음과 같이 테스트 코드 작성
var express = require('express');
var router = express.Router();
var oracleDb = require('oracledb');
var dbConfig = require('../config/dbconfig');
/* GET users listing. */
router.get('/', function(req, res, next) {
run().then(function(result){
res.send(result);
}).catch(function(err){
res.send(err);
});
});
function run(){
return new Promise(function(resolve,reject){
(async() => {
let connection;
try{
connection = await oracleDb.getConnection({
user : dbConfig.user,
password : dbConfig.password,
connectString : dbConfig.connectString
});
var sql = "select * from tab";
const result = await connection.execute(sql,
[],
{outFormat : oracleDb.OBJECT});
//console.log(result.rows);
var jArray = new Array();
for(const row of result.rows)
{
var rtnJson = new Object();
rtnJson.TNAME = row.TNAME.toString();
rtnJson.TABTYPE = row.TABTYPE.toString();
jArray.push(rtnJson);
}
return resolve(jArray);
} catch(err) {
console.log(err);
return reject(err);
} finally {
if(connection){
try{
await connection.close();
} catch (err){
return reject(err);
}
}
}
})();
});
}
module.exports = router;
3.4 npm start 로 구동
3.5 크롬이나 익스에서 http://localhost:3000/users
3.6 결과확인