여러분들! 효근입니다!
이번엔 Node.js의 app.js를 여러 파일로 분할해볼겁니다.
var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var app = express();
const uri = 'mongodb://127.0.0.1:27017/user_db_name';
var db = mongoose.connect(uri, (err) => {
if (err) {
console.log(err.message);
} else {
console.log('Succesfully Connected!');
}
});
var TodoSchema = new mongoose.Schema({
title: String,
date: { type: Date, default: new Date() },
isDone: { type: Boolean, default: false },
});
var Todos = mongoose.model('todos', TodoSchema);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ limit: '1gb', extended: false }));
app.get('/getList', async (req, res) => {
let result = await Todos.find();
return res.status(200).json({ data: result });
});
app.post('/putList', async (req, res) => {
let new_todo = new Todos(req.body);
try {
await new_todo.save();
return res.status(200).json({ message: 'success!' });
} catch (e) {
return res.status(500).json({ message: 'ERR', E: e });
}
});
app.post('/changeIsDone', async (req, res) => {
let todo = await Todos.update({ _id: req.body._id }, { $set: { isDone: true } });
if (todo.ok) return res.status(200).json({ message: 'success!' });
else return res.status(500).json({ message: 'ERR!' });
});
app.post('/deleteTodo', async (req, res) => {
let todo = await Todos.deleteOne({ _id: req.body._id });
if (todo.ok) return res.status(200).json({ message: 'success!' });
else return res.status(500).json({ message: 'ERR!' });
});
app.listen(4000, () => console.log('Server On 4000'));
저번 시간에 만든 To - Do List 입니다.
이와 같은 폴더 구조로 나눠보겠습니다.
var mongoose = require('mongoose');
const uri = 'mongodb://127.0.0.1:27017/user_db_name';
var db = mongoose.connect(uri, (err) => {
if (err) {
console.log(err.message);
} else {
console.log('Succesfully Connected!');
}
});
var TodoSchema = new mongoose.Schema({
title: String,
date: { type: Date, default: new Date() },
isDone: { type: Boolean, default: false },
});
Todos = mongoose.model('todos', TodoSchema);
exports.Todos = Todos;
mongo/index.js 입니다.
exports.Todos 를 사용함으로써, Todos를 밖으로 빼낼 수 있습니다.
require('./mongo');
app.js에서 위와 같은 코드로 불러옵니다.
var todo = require('./routes/todos')(express.Router(), Todos);
todos.js를 만들고 app.js에 위의 코드를 사용해 라우트에 사용할 모듈을 가져옵니다.
module.exports = (router, Todos) => {
router.get('/getList', async (req, res) => {
let result = await Todos.find();
return res.status(200).json({ data: result });
});
router.post('/putList', async (req, res) => {
let new_todo = new Todos(req.body);
try {
await new_todo.save();
return res.status(200).json({ message: 'success!' });
} catch (e) {
return res.status(500).json({ message: 'ERR', E: e });
}
});
router.post('/changeIsDone', async (req, res) => {
let todo = await Todos.update({ _id: req.body._id }, { $set: { isDone: true } });
if (todo.ok) return res.status(200).json({ message: 'success!' });
else return res.status(500).json({ message: 'ERR!' });
});
router.post('/deleteTodo', async (req, res) => {
let todo = await Todos.deleteOne({ _id: req.body._id });
if (todo.ok) return res.status(200).json({ message: 'success!' });
else return res.status(500).json({ message: 'ERR!' });
});
return router;
};
todos.js 입니다.
express router는 app.post 와 같은 식으로 router.post 같은 통신을 구축할 수 있습니다.
반환 객체로 통신을 추가한 router를 반환합니다.
app.use('/', todo);
마지막으로 라우트 된 객체를 사용합니다.
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
require('./mongo');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ limit: '1gb', extended: false }));
var todo = require('./routes/todos')(express.Router(), Todos);
app.use('/', todo);
app.listen(4000, () => console.log('Server On 4000'));
줄여진 app.js 입니다. 깔끔한가요?
문제 없이 잘 작동 하는군요.
이상으로 글을 마치겠습니다.
'JavaScript > Node.js Lecture' 카테고리의 다른 글
9. Node.js Multer 이미지 업로드 (0) | 2020.11.19 |
---|---|
8. Node.js cors (0) | 2020.11.19 |
6. Node.js To-Do List (0) | 2020.11.19 |
5. Node Promise (0) | 2020.11.16 |
4. Node 동기/ 비동기 처리 ( async / await ) (0) | 2020.11.16 |