app.js 4.13 KB
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

mongoose.connect('mongodb://root:root@localhost:27017/travelDB', {
  dbName: 'travelDB',
  useNewUrlParser: true,
  useUnifiedTopology: true
}); // node앱을 mongoDB에 연결
//mongoDB express를 실행했을 때, username = root, password = root, Database = travelDB를 입력해서 연결 가능

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');


var TravelSchema = mongoose.Schema({ //Travel이라는 스키마 생성(javascript 객체 생성자와 유사)
  name: String,
  address: String,
  weather: String,
  date: String,
  url: String,
  pos: String
});

const toTravel = mongoose.model('Travel', TravelSchema); // 스키마를 model로 정의 -> collection 명칭을 mongoose에서는 단수로 사용하지만
// mongodb에 저장될 때에는 복수 + 소문자로 저장됨 여기선 travels로 저장되므로 db.travels라고 호출해야 정상적인 값 얻기 가능
// db.travels.find()처럼 사용
var JeonJu = new toTravel({
  name: '전주 한옥마을',
  address: '전라북도 전주시 완산구 풍남동3가 기린대로 99',
  weather: '맑음',
  date: '2021-11-14'
});

var HongDae = new toTravel({
  name: '서울 홍대거리',
  address: '서울특별시 마포구 와우산로 94(상수동) 홍익대학교',
  weather: '흐림',
  date: '2021-11-15'
});
var Busan = new toTravel({
  name: '부산 해운대',
  address: '부산광역시 해운대구 중동',
  weather: '우박',
  date: '2021-11-16'
});
var Jeju = new toTravel({
  name: '제주도',
  address: '제주특별자치도 제주시 세종로 88',
  weather: '비',
  date: '2021-11-17'
});
// Travel 객체를 new로 생성해서 값을 입력해줌

JeonJu.save(function (error, data) {
  if (error) {
    console.log(error);
  }
  else {
    console.log('saved!');
  }
});

toTravel.insertMany([Seoul, Busan, Jeju], function (err) {
  if (err) {
    console.log(err);
  } else {
    mongoose.connection.close();
    console.log("Successfully saved to travelDB");
  }
});

toTravel.find(function (err, travels) { // toTravel이라는 모델에 저장된 데이터 전체 불러오기 = find(), 데이터 하나 가져오기 = findOne()
  console.log('---READ ALL---');
  if (err) {
    console.log(err);
  } else {
    fruits.forEach(function (element) {
      console.log(travels.name); // 각각의 이름(지명) 출력
    });
  }
});

const q0 = toTravel.find();

toTravel.updateOne({ // mongoDB에 저장된 document 내용 수정, 첫번째 파라미터로 수정할 document 선택, 두 번째 파라미터로 수정할 내용을 입력
  _id: "5e859d8cef3a5d234c6c19c0"
}, {
  name: "제주도"
}, function (err) {
  if (err) {
    console.log(err);
  } else {
    console.log("Successfully updated the document");
  }
});

toTravel.deleteOne({ // mongoDB에 저장된 document 삭제. 첫 번째 파라미터로 삭제할 document를 선택하여 삭제
  _id: "5e86a7a216b28f3b08a88755"
}, function (err) {
  if (err) {
    console.log(err);
  } else {
    console.log("Successfully deleted");
  }
});


toTravel.find(function (error, travels) { //전체 가져오기
  console.log('--- Read all ---');
  if (error) {
    console.log(error);
  } else {
    console.log(travels);
  }
});


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');
});


module.exports = app;