일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이진트리
- 써니나타스
- node
- 자바
- 워게임추천
- gitbash
- 웹기초
- bootstrap
- 웹개발
- MongoDB
- CTF
- 자료구조
- mongoose
- 워게임
- 웹해킹
- 포렌식워게임
- materialize
- 자바기초
- 이진탐색트리
- 웹해킹기초
- Express
- wargame.kr
- GIT
- 그래프
- node.js
- 포렌식
- 뷰
- NavBar
- 자바문제풀이
- nodeJS
- Today
- Total
보안 전공생의 공부
주소록 만들기 / module 본문
· module : 보다 작고 이해할 수 있는 단위로 나뉘어진 것
- 본체에서 분리되어 작은 부분으로 유기적으로 구성되어 있다가,
필요할 때 본체에 합류하여 그 기능을 수행할 수 있는 것
· 모듈화 : 거대한 문제를 작은 조각의 문제로 나누어 다루기 쉽도록 하는 과정
(출처 : http://www.ktword.co.kr/test/view/view.php?m_temp1=2226 )
-> module은 다른 파일에 있는 object를 불러와서 현재 파일에서 사용하는 것
다른 파일의 object를 불러오기 위해서는 해당 object를 module.exports에 담아주어야 함
다른 파일의 module을 불러오기 위해서는 require 함수 사용.
require 함수의 parameter로 대상 module의 상대위치와 파일이름을 문자열로 넣는다.
- js파일만 module로 불러올 수 있기 때문에 파일이름에서 .js는 생략
- module이 node_modules폴더에 있다면 위치 생략 가능(npm install로 설치한 package)
예제) main.js에서 my-module.js를 호출하기
main.js와 같은 위치에 my-module.js를 둔다.
// my-module.js
const myModule = {
name: "suin",
age: 21,
aboutMe: function(){
console.log("Hi, my name is " + this.name + " and I'm " + this.age + " year's old.");
}
};
module.exports = myModule;
- myModule 오브젝트를 만든 후, module.exports에 넣어준다.
// main.js
const m = require('./my-module');
console.log(m.name);
console.log(m.age);
m.aboutMe();
- 변수 m에 ./my-module.js에서 호출된 module을 담는다.
-> my-module.js의 myModule obeject와 main.js의 변수 m이 동일하게 된다.
기존의 index.js 파일 하나에 모든 서버코드를 작성하였지만,
코드가 길어지게 되면 파일을 나누는 것이 개발에 효율적이기 때문에
개별 파일로 원래 코드를 분리하고 express를 사용하여 라우팅을 관리하도록 할 것이다.
index.js 코드에서
Contact model -> models/Contact.js
contact route -> routes/contacts.js
home route -> routes/home.js
로 이동한다.
//index.js
const express=require('express')//모듈 가져오기
const mongoose=require('mongoose')
const methodOverride = require('method-override')
const app = express()//어플리케이션 생성
// DB setting
mongoose.connect(process.env.MONGO_DB);
const db = mongoose.connection;
db.once('open', function(){
console.log('DB connected');
})
db.on('error', function(err){
console.log('DB ERROR : ', err);
});
app.set('view engine','ejs')//템플릿 엔진
app.use(express.json());
app.use(express.static(__dirname+'/public'));
app.use(express.urlencoded({extended:true}));
app.use(methodOverride('_method'));
//Routes
app.use('/', require('./routes/home'));
app.use('/contacts', require('./routes/contacts'));
//port setting
const server=app.listen(3000, ()=>{
console.log('Start Server : localhost:3000')
})
//Routes
app.use('/', require('./routes/home'));
app.use('/contacts', require('./routes/contacts'));
익스프레스 앱과는 app.use()로 연결되어 있다(라우팅 미들웨어)
첫 번째 인자로 주소를 받아서 특정 주소에 해당하는 요청이 들어왔을 때만 미들웨어가 동작한다.
주소가 /로 시작하면 routes/home.js을,
/users로 시작하면 routes/contacts.js을 호출한다.
use 대신 HTTP 메서드(get, post, delete 등)도 사용가능하다.
※ use 매서드 - 요청 주소만 일치하면 실행
HTTP 매서드 - 주소 & http메서드 모두 일치하는 요청에 의해 실행
//routes/home.js
const express=require('express')
const router=express.Router()
router.get('/', function(req, res){
res.redirect('/contacts');
});
module.exports=router;
const router=express.Router()
router 객체는 express.Router()로 만든다.
index.js의 app.use('/', require('./routes/home'));와
home.js의 router.get('/', function(req, res){
res.redirect('/contacts');
});
가 합쳐져 /으로 GET요청을 했을 때 이 모듈의 콜백함수가 실행된다.
마지막에 module.exports=router;로
router 객체가 모듈이 되어 require시에 사용된다.
//routes/contacts.js
const express=require('express')
const router = express.Router()
const Contact= require('../models/Contact')
// Contacts - Index
router.get('/', function(req, res){
Contact.find({}, function(err, contacts){
if(err) return res.json(err);
res.render('contacts/index', {contacts:contacts});
});
});
// Contacts - New
router.get('/new', function(req, res){
res.render('contacts/new');
});
// Contacts - create
router.post('/', function(req, res){
Contact.create(req.body, function(err, contact){
if(err) return res.json(err);
res.redirect('/contacts');
});
});
//Contacts - show
router.get('/:id', function(req,res){
Contact.findOne({_id:req.params.id},function(err,contact){
if(err) return res.json(err);
res.render('contacts/show',{contact:contact});
});
});
//Contacts - edit
router.get('/:id/edit',function(req,res){
Contact.findOne({_id:req.params.id},function(err,contact){
if(err) return res.json(err);
res.render('contacts/edit',{contact:contact});
});
});
//Contacts - update
router.put('/:id',function(req,res){
Contact.findOneAndUpdate({_id:req.params.id},req.body, function(err,contact){
if(err) return res.json(err);
res.redirect('/contacts/'+req.params.id);
});
});
//Contacts - destroy
router.delete('/:id', function(req,res){
Contact.deleteOne({_id:req.params.id},function(err){
if(err) return res.json(err);
res.redirect('/contacts');
});
});
module.exports=router;
const Contact= require('../models/Contact')
Contact model을 require로 호출한다.
home.js와 마찬가지로
index.js의 app.use('/contacts', require('./routes/contacts'));와
contacts.js의
router.get('/', function(req, res){
Contact.find({}, function(err, contacts){
if(err) return res.json(err);
res.render('contacts/index', {contacts:contacts});
});
});
가 합쳐져 /contacts으로 GET요청을 했을 때 이 모듈의 콜백함수가 실행된다.
get 외의 put, post, delete도 마찬가지이다.
// models/Contact.js
const mongoose = require('mongoose');
const contactSchema = mongoose.Schema({
name:{type:String, required:true, unique:true},
email:{type:String},
phone:{type:String}
});
const Contact = mongoose.model('contact', contactSchema);
module.exports = Contact;
기존의 코드를 분리하고 위치를 바꾼 것이기 떄문에 이전과 실행결과가 변함 없다.
출처·참조 : https://backback.tistory.com/341
'WEB > Node' 카테고리의 다른 글
게시판 만들기 / back end + mongoose 정리 (0) | 2021.10.18 |
---|---|
주소록 만들기 / bootstrap, static 파일 서비스+경로 규칙 (2) | 2021.10.17 |
주소록 만들기 / show, edit, update, destroy (0) | 2021.10.07 |
주소록 만들기 / index, new, create (0) | 2021.10.07 |
MongoDB를 node.js에 연결하기 | mongoDB 연결 오류 문제 해결 (2) | 2021.10.04 |