[Node.JS] express router에서 module.exports 와 exports

2017. 6. 13. 00:19개발/Node.js

반응형

Express 프레임워크를 통해 Web을 구성하면 routes 폴더가 자동으로 생성된다.


그리고 routes/index.js 도 자동으로 생성되어 있는것을 볼 수 있다.


여기서 기본적으로 생성되는 코드를 보면 다음과 같다.


 

1
2
3
4
5
6
7
8
9
var express = require('express');
var router = express.Router();
 
/* GET home page. */
router.get('/'function(req, res) {
  res.render('index', { title: 'Express' });
});
 
module.exports = router;
cs



여기서 module.exports = router 부분을 볼 수 있다.


보통 모듈을 생성할때는 다음과 같이 썼었다.

1
2
3
exports.my_func = function(param) {
    return param;
}
cs


exports를 써서 모듈을 생성하는 것과 module.exports의 차이점을 찾아보니 다음과 같았다.


exports를 사용해서 모듈을 생성할때와 module.exports를 사용할때와 모두 리턴되는 값은 module.exports로 동일하다.

즉, exports에 멤버를 추가하면 module.exports에도 멤버가 추가되는 것을 뜻한다.

만약, exports에 다른 객체를 추가하게 되면 module.exports와는 달라지게 되고, exports를 수정하더라도 모듈에는 영향을 주지 못한다는 뜻이다.





index.js 를 해석하면 다음과 같다.

1
2
3
4
5
6
7
8
9
var express = require('express');
var router = express.Router();     // express의 router 객체를 불러온다.
 
/* GET home page. */
router.get('/'function(req, res) {     // router 객체의 일부 속성을 변경한다.
  res.render('index', { title: 'Express' });
});
 
module.exports = router;    // 이 객체 자체를 모듈로 리턴해 준다.
cs




그리고 exports를 사용하여 일반 모듈처럼 생성해서 사용하고 싶다면 다음과 같이 쓸 수 있다.

1
2
3
4
5
var express = require('express');
var router = express.Router();
exports = router.get('/'function(req, res, next) { // router 객체를 생성후 exports 해준다.
    res.render('index', {title: 'Express'});
});
cs






참고 사이트


http://programmingsummaries.tistory.com/340

반응형