Notice
Recent Posts
Recent Comments
Link
개발스토리
Node.js , Mongoose 이용한 간단한 CRUD 사이트 본문
● app.js
const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const mongoose = require('mongoose');
const config = require('./config/database');
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const app = express();
//connect db
mongoose.connect(config.database);
const db = mongoose.connection;
db.on('error',console.error.bind(console,'connection error:'));
db.once('open', ()=>{
console.log('Connected to MongoDB');
})
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
app.listen(3000,()=>{
console.log('server start');
})
module.exports = app;
- app.js 전체 코드
● config/database.js
module.exports = {
database : 'mongodb://localhost/testtt'
}
- app.js에서 작성하지 않고, config폴더에서 연동을 한 뒤 git에 올릴 때, 공개되지 않게 설정하려고 따로 작성.
● person.js
const mongoose = require('mongoose');
const PersonSchema = mongoose.Schema({
name : String,
age : Number
});
const Person = mongoose.model('Person',PersonSchema);
let person = module.exports = mongoose.model('Person', PersonSchema);
● index.ejs
<html>
<body>
<h1>목록</h1>
<ul>
<% people.forEach((person) =>{ %>
<li>
<a href="/<%= person._id %>"</a> <%= person.name %></a>
</li>
<% }) %>
</ul>
<a href="/create">추가</a>
</body>
</html>
자바스크립트의 forEach문을 이용해 app.js에서 받은 people(person의 복수형으로 mongoose에서 자동으로 바꿔줌)을 조회하면서 person.name을 하나씩 출력합니다.
● create.ejs
<html>
<body>
<form action="/create" method=POST>
<div>이름: <input type="text" name="name"></div>
<div>나이: <input type="text" name="age"></div>
<div><button>submit</button></div>
</form>
</body>
</html>
● read.ejs
<html>
<body>
<h1>이름: <%= person.name %></h1>
<h2>나이: <%= person.age %></h2>
<a href="/delete/<%= person._id %>">삭제</a>
<a href="/update/<%= person._id %>">변경</a>
<a href="/"">돌아가기</a>
</body>
</html>
● update.ejs
<html>
<body>
<form action="/update/<%= person._id %>" method=POST>
<div>이름: <input type="text" name="name" value="<%= person.name %>"></div>
<div>나이: <input type="text" name="age" value="<%= person.age %>"></div>
<div><button>submit</button></div>
</form>
</body>
</html>
● index.js
const express = require('express');
const Person = require('../models/person');
const router = express.Router();
router.get('/',(req,res)=>{
Person.find({},(err,people)=>{
if(err) return res.json(err);
res.render('index',{people:people});
});
});
router.get("/:id",(req,res)=>{
Person.findOne({_id: req.params.id},(err,person)=>{
if(err) res.json(err);
res.render('read',{person:person});
});
});
router.get('/create',(req,res)=>{
res.render('create');
});
router.post('/create',(req,res)=>{
Person.create(req.body,(err,people)=>{
if(err) return res.json(err);
res.redirect('/');
});
});
router.get('/update/:id',(req,res)=>{
Person.findOne({_id:req.params.id},(err,person)=>{
if(err) res.json(err);
else
res.render('update',{person : person});
});
});
router.post('/update/:id',(req,res)=>{
Person.updateOne({_id: req.params.id},
{ $set: {name: req.body.name, age: req.body.age} },
(err,person)=>{
if(err) return res.json(err);
else
res.redirect('/');
});
});
router.get('/delete/:id',(req,res)=>{
Person.deleteOne({_id : req.params.id},(err,person)=>{
if(err) res.json(err);
else
res.redirect('/');
});
});
module.exports = router;
'node.js' 카테고리의 다른 글
서버로서의 노드 (0) | 2020.12.02 |
---|---|
노드의 개요 (0) | 2020.12.01 |
코딩 일기_객체 지향 프로그래밍 (2) | 2020.07.07 |
코딩 일기_객체 지향 프로그래밍 개요 (0) | 2020.07.06 |
코딩 일기 (0) | 2020.07.06 |
Comments