개발스토리

Node.js , Mongoose 이용한 간단한 CRUD 사이트 본문

node.js

Node.js , Mongoose 이용한 간단한 CRUD 사이트

무루뭉 2020. 10. 2. 19:08

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