여러분들! 효근입니다!
이번엔 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 | 
 
									
								 
									
								