프로젝트 생성 및 구동용 프로그램 설치
CMD> npm i express-generator -g
CMD> npm i nodemon -g
// -- 벡엔드 만들기
CMD> express -e exp_20220311
CMD> cd exp_20220311
CMD> npm install => node_modules
CMD> nodemon --inspect ./bin/www => 실행 (소스코드 변경 적용됨)
// -- mongodb연동 => node_modules
// 참고 : https://github.com/Automattic/mongoose
// https://www.npmjs.com/package/mongoose
CMD> npm i --save mongoose
CMD> npm i --save mongoose-sequence
CMD> npm i --save socket.io => 실시간 처리
파일명 app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
// npm i mongoose --save
var mongoose = require('mongoose');
mongoose.connect('mongodb://id219:pw219@1.234.5.158:37017/db219')
var db = mongoose.connection;
db.once('open', function(){
console.log('mongodb 연결됨.');
})
// routes 등록
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var bookRouter = require('./routes/book');
var memberRouter = require('./routes/member');
var app = express();
// 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')));
// url 설정
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/book', bookRouter);
app.use('/member', memberRouter);
// 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');
});
module.exports = app;
파일명 models/book.js (spring의 entity와 비슷)
// npm i mongoode --save
var mongoose = require('mongoose');
// npm i --save mongoose-sequence
const AutoIncrement = require('mongoose-sequence')(mongoose);
var Schema = mongoose.Schema;
// 책코드, 책제목, 가격, 저자, 등록일
var bookSchema = new Schema({
_id : Number,
title : { type : String, default : '' },
price : { type : Number, default : 0 },
author : { type : String, default : '' },
regdate : { type : Date , default : Date.now}
});
// 시퀀스 사용 설정
bookSchema.plugin(AutoIncrement, {id:'SEQ_BOOK8_ID', inc_field:'_id'} )
module.exports = mongoose.model('book8', bookSchema);
파일명 routes/book.js
var express = require('express');
var router = express.Router();
// book 스키마 가져오기
var Book = require('../models/book');
// 127.0.0.1:3000/book/insert
// {'title':'통합구현', 'price': 1200 , 'author':'가나다'}
router.post('/insert', async function(req, res, next) {
try {
// var 객체명 = new 클래스명();
var obj = new Book();
obj.title = req.body.title;
obj.price = Number(req.body.price);
obj.author = req.body.author;
const result = await obj.save();
console.log(result);
if(result._id > 0){
return res.json({status:200});
}
return res.json({status:0});
} catch (e) {
console.error(e);
return res.json({stasus : -1});
}
});
// 127.0.0.1:3000/book/select
router.get('/select', async function(req, res, next) {
try {
const result = await Book.find({}).sort({_id:-1});
res.json({stasus:200, result:result});
} catch (error) {
console.error(e);
res.json({stasus:-1});
}
});
module.exports = router;
파일명 model/member.js (spring의 entity와 비슷)
// npm i mongoode --save
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var memberSchema = new Schema({
_id : { type : String, default : '' },
name : { type : String, default : '' },
password : { type : String, default : '' },
email : { type : String, default : '' },
age : { type : Number, default : 0 },
regdate : { type : Date , default : Date.now}
});
module.exports = mongoose.model('member8', memberSchema);
파일명 routes/member.js
var express = require('express');
const member = require('../models/member');
var router = express.Router();
// member 스키마 가져오기
var Member = require('../models/member');
// 127.0.0.1:3000/member/delete
router.delete('/delete', async function(req, res, next){
try {
const result = await Member.deleteOne({_id : req.body._id});
console.log(result);
if(result.deletedCount === 1){
return res.json({stasus:200});
}
return res.json({stasus:0});
} catch (e) {
console.error(e);
res.json({status:-1});
}
})
// 127.0.0.1:3000/member/update
// {"_id":"aaa", "name":"변경할이름", "age":130}
router.put('/update', async function(req, res, next){
try {
// 기존 데이터를 읽음
const obj = await Member.findOne({_id : req.body._id});
// console.log("변경전", obj);
// 변경할 항목(이름, 나이)설정
obj.name = req.body.name;
obj.age = Number(req.body.age);
// console.log("변경후", obj);
// 저장하기(아이디 값이 동일하기 때문에 수정됨.)
const result = await obj.save();
console.log("result", result);
return res.json({stasus:200});
} catch (e) {
console.error(e);
res.json({status:-1});
}
});
// 127.0.0.1:3000/member/insert
// {"_id":"aaa", "name":"aaa", "password":"aaa", "email":"aaa@gmail.com", "age":30}
router.post('/insert', async function(req, res, next) {
try {
var obj = new Member();
obj._id = req.body._id;
obj.name = req.body.name;
obj.password = req.body.password;
obj.email = req.body.email;
obj.age = Number(req.body.age);
const result = await obj.save();
console.log(result);
if(result._id !== null){
return res.json({status:200});
}
return res.json({status:0});
} catch (e) {
console.error(e);
res.json({status:-1});
}
});
// 127.0.0.1:3000/member/select
router.get('/select', async function(req, res, next){
try {
const result = await Member.find({});
res.json({stasus:200, result:result});
} catch (e) {
console.error(e);
res.json({status:-1});
}
});
module.exports = router;