지난포스트 (deprecated)/NodeJS (deprecated)

express 파일 모듈화 방법

.log('FE') 2018. 12. 27. 23:41
728x90
반응형

 

 

/user01.js

 

// export 객체 속성으로 함수 추가
exports.getUser = function() {
return {id: 'module01', name: 'codereading'};
}


exports.group = {id: 'group01', name: 'Family'};


exports.sum = function (a, b) {
return a + b;
}


위의 파일은 모듈이 될 파일이고 3종류의 다른 함수와 객체값을 갖습니다.

 

/module01.js

 

// 모듈화한 파일을 불러와서 const 에 저장
const user01 = require('./user01');


// 모듈화한 파일에서의 정보 가져오기
const userName = user01.getUser().name;
const userId = user01.getUser().id;


console.log(userName, userId);




const groupId = user01.group.id;
const groupName = user01.group.name;


console.log(groupId, groupName);




const twoSum = user01.sum(123, 15);


console.log(twoSum);

 

위의 코드는 require 로 모듈파일을 불러와 내부에서 사용하는 코드입니다.

 

 

객체를 위와같은 방법으로 모듈화하고 불러올때는 exports 를 전역변수가 아닌 모듈내부에서 선언된 변수로 인식하게되어 제대로 모듈파일이 불러와지는것이 아닌 빈 객체를 만들어 내게됩니다.

 

따라서 객체를 모듈로 만들어주고싶을땐 아래와 같이 해야합니다.

 

 

 

 

 

/user01.js (객체 할당)

 

let user = {
getUser : function() {
return {id : 'user01', name : 'codereading'};
},
group : {id : 'group', name : 'family'},
sum : function(a, b) {
return a + b;
}
}


module.exports = user;

 

 

 

 

 

/user01.js (함수할당)

 

module.exports = function() {
return {id : 'user01', name : 'codereading'}
}

 

 

/module01.js (함수 할당한 모듈 불러와 사용)

 

// 모듈화한 파일을 불러와서 const 에 저장
const user01 = require('./user01');


console.dir(user01().name);

 

 

 

 

exports 와 module.exports 를 모두 사용할 수 있지만 함께 사용했을경우 module.exports 가 더 우선권이 주어지기때문에 실제 사용시에는 module.exports 의 사용을 권장합니다.

 

 

 

require() 메소드 동작방식

 

// require 동작방식 이해하기
var require = function(path) {
var exports = {
getUser : function() {
return {id : 'user01', name : 'codereading'};
},
group : {id : 'group', name : "family"},
sum : function (a, b) {
return a + b;
}
}
return exports;
}

let user = require('.');

let userName = user.getUser().name;
let userFamilyName = user.group.name;
let userSum = user.sum(3, 5);
console.log(`
userName : ${userName},
userFamilyName : ${userFamilyName},
userSum : ${userSum}
`);

 

 

모듈을 분리할때 사용하는 코드패턴

 

코드 패턴 설명
함수를 할당하는 경우 모듈안에서 함수를 만들어 할당합니다.
모듈을 불러온 후 소괄호를 붙여 모듈을 실행합니다.
인스턴스 객체를 할당하는 경우 모듈안에서 인스턴스 객체를 만들어 할당
모듈을 불러온후 해당 개체의 메소드를 호출하거나 속성을 사용
프로토타입 객체를 할당하는 경우 모듈 안에서 프로토타입 객체를 만들어 할당
모듈을 불러온 후 new 연산자로 인스턴스 객체를 만들어 사용

 

// === 함수할당 코드패턴 === //
// 모듈생성
let printUser = function () {
console.log('uer 이름은 codereading 입니다.');
}


module.exports = printUser;



// 모듈 불러올때
let printUser = require('불러올모듈파일이름').printUser;
printUser();




// === 인스턴스 객체를 할당하는 코드패턴 === //
// 모듈생성
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 : 'Group01', name : 'Family'};


User.prototype.printUser = function() {
console.log(`user 이름 : ${this.name}, Group 이름 : ${this.group.name}`);
}


module.exports = new User('User01', 'codereading');


// 모듈 불러올때
let user = require('불러올모듈파일이름');
user.printUser;




// === 프로토타입객체를 할당 === //
// 모듈생성
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 : 'Group01', name : 'Family'};


User.prototype.printUser = function() {
console.log(`user 이름 : ${this.name}, Group 이름 : ${this.group.name}`);
}


module.exports = User;


// 모듈 불러올때
let User = require('불러올모듈파일이름');
let user = new User('user01', 'codereading');


user.printUser();

 

 

 

code-reading 블로그에 방문해 주셔서 환영합니다.
댓글은 모두 환영하니 많이 달아주세요.

 


 

728x90
반응형