본문 바로가기

Node

Node.js + Oracle

1. Oracle 지원 모듈 설치

 npm install oracledb --save

 

*참고*

.h => c언어
.dll - dynamic linked library 
vc - visual studio에서 c로만든 프로그램 (vc8 8버전)


2. ORACLE정보 cmd창에 등록

1)  ORACLE의 lib를 등록한다
C:\Users\stu>set OCI_LIB_DIR = C:\app\stu\product\11.2.0\dbhome_1\OCI\lib\MSVC
2) 
C:\Users\stu>set OCI_LIB_DIR = C:\app\stu\product\11.2.0\dbhome_1\OCI\include

 

*참고*

프로젝트 생성할 때 원래쓰던 패키지 가져오는법 
방법1. node_modules 폴더 copy 해오기 
방법2. package.json만 copy해 온 후 해당프로젝트 cmd창가서 npm install 명령어 주기 
(패키지 다 설치 + 기본모듈까지 설치해줌)

 


기본 예제

- 이전 시간에 배운 Node.js + MongoDB에서 사용했던 예제를 그대로 가지고 겹치는 코딩만 모듈화 시켜놓는 작업을 할 것  + Oracle DB 사용하기 

* script 파일명은 보통 앞글자 소문자

[공통]

- user.js : 내보내는 파일

- moduleTest.js : user.js를 불러올 파일

 

 

user1.js

// exports 객체 속성으로 함수(메소드) 추가
exports.getUser = function(){
	return {id:"미스에이",name:"suzi"};
}

// exports 객체 속성으로 객체를 추가
exports.group = {id:"EXID",name:"하니"};

 

moduleTest1.js

// user1.js 불러오기
var user = require("./user1");

//메소드 갖다씀
function showId() {
	return user.getUser().id + ", " + user.group.id; 
}

//객체 갖다씀
function showName() {
	return user.getUser().name + ", " + user.group.name; 
}

console.log("아이디 정보: " + showId());
console.log("이름정보: " + showName());

require 메소드는 exports 객체를 리턴한다.

(게속 써오던 require 메소드들은 내부적으로 전부 user1.js 코딩처럼 되어 있다)

 

 

 


user2.js

exports = {	
	//메소드
	getUser : function(){ 
		return {id:"미스에이",name:"suzi"};
	},
	
	//group이라는 객체
	group  : {id:"EXID",name:"하니"}
}

이 메소드와 객체, 두개를 같이 써도 되느냐? X
exports에는 속성만 추가할 수 있고 (user1.js처럼) 객체는 할당할 수 없다 
exports에 속성을 추가하면 모듈에서 접근이 가능하지만 객체를 할당하면 자바스크립트에서는 새로운 변수로 처리한다

 

var user = require("./user2");

console.dir(user); 
// 결과: {} -> null값
// 그냥 비어있는 user 변수 하나를 선언했다고 생각하는것임

module.exports에 객체를 직접 할당해서 내보내기? O

객체 user안에 메소드와 객체를 같이 묶어 내보낸다

 

 user3.js

var user = {	
	getUser : function(){ 
		return {id:"미스에이",name:"suzi"};
	},	
	group  : {id:"EXID",name:"하니"}
}

//하나의 묶음으로 user에 담아서 내보낼 수 있다
module.exports = user;  

moduleTest3.js

var user = require("./user3");

console.dir(user); 

function showId() {
	return user.getUser().id + ", " + user.group.id; // 메소드 갖다씀
}

function showName() {
	return user.getUser().name + ", " + user.group.name; // 객체 갖다씀
}

console.log("아이디 정보: " + showId());
console.log("이름정보: " + showName());

 

 


module.exports에 함수를 직접 할당하기

 

user4.js

module.exports = function(){	
	return {id:"suzy",name:"배수지"};	
};

moduleTest4.js

var user = require("./user4");

function showUser(){
	return user().name + "(" + user().id + ")";
};

console.log("사용자 정보: " + showUser());

(우선순위) module.exports가 사용되면 그냥 exports는 무시된다 

 

user5.js

// module
module.exports = {	
	
	getUser : function(){ 
		return {id:"미스에이",name:"suzi"};
	},	
	
	group  : {id:"EXID",name:"하니"}	
	
};

// exports 객체 속성으로 객체 추가
exports.group = {id:"모델",name:"안젤리나"};

moduleTest.js

var user = require("./user5");

function showId() {
	return user.getUser().id + ", " + user.group.id; 
}

function showName() {
	return user.getUser().name + ", " + user.group.name; 
}

console.log("아이디 정보: " + showId());
console.log("이름정보: " + showName());

 

 


require("./....").printUser; 방식으로 가져오기

 

user6.js

exports.printUser = function() {
	console.log("사용자의 이름은 suzy 입니다");
}

moduleTest6.js

var printUser = require("./user6").printUser;
// MongoClient 가져올때도 똑같은 방식이였음

printUser();

 


사용패턴 - 1. 객체를 생성함과 동시에 초기화, 내보내기

* prototype이 들어가는건 무조건 메소드임

 

user7.js

// 함수로 생성자 지정
function User(id,name) {
	this.id = id;
	this.name = name;	
}

// User 객체의 printUser 메소드 생성
User.prototype.printUser = function(){
	console.log("이름: %s, 그룹: %s", 
			this.name, this.id);
}

//객체를 생성함과 동시에 초기화
module.exports = new User("미스에이","수지");

moduleTest7.js

var user = require("./user7");
user.printUser();

사용패턴 - 2. 클래스 내보내기

 

user8.js

// 함수로 생성자 지정
function User(id,name) {
	this.id = id;
	this.name = name;	
}

User.prototype.getUser = function() {
	return {id:this.id, name:this.name};
}

User.prototype.group = {id: "미스에이", name:"수지"};


// User 객체의 printUser 메소드 생성
User.prototype.printUser = function(){
	console.log("이름: %s, 그룹: %s", 
			this.name, this.id);
	
	console.log("이름: %s, 그룹: %s", 
			this.group.name, this.group.id);
};

// 클래스 내보냄
module.exports = User; 

moduleTest8.js

// 클래스를 받은것이기 때문에 대문자로 받은것임 User
var User = require("./user8");
var user = new User("MissA","suzi");

user.printUser();