본문 바로가기

JavaScript/Node.js Lecture

7. Node.js Route, export

여러분들! 효근입니다!

이번엔 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