[MongoDB] - Mongoose 이용하여 데이터 전체 출력하기 (2)
MongoDB2018. 11. 23. 13:48
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
○ MongoDB Mongoose 이용하여 데이터 전체 출력하기 (2) |
// app.js - (1)에서 추가된 내용만 '// ---------' 으로 표시 // Express 기본 모듈 불러오기 var express = require('express') , http = require('http') , path = require('path'); // Express의 미들웨어 불러오기 var static = require('serve-static') var bodyParser = require('body-parser') // mongoose 모듈 사용 var mongoose = require('mongoose'); // 익스프레스 객체 생성 var app = express() // 기본 속성 설정 app.set('port', process.env.PORT || 3000); // public 폴더를 static으로 오픈 app.use('/public', static(path.join(__dirname, 'public'))); // body-parser를 이용해 application/x-www-form-urlencoded 파싱 app.use(bodyParser.urlencoded({ extended: false })) // body-parser를 이용해 application/json 파싱 app.use(bodyParser.json()) //===== 데이터베이스 연결 =====// // 데이터베이스 객체를 위한 변수 선언 var database; // 데이터베이스 스키마 객체를 위한 변수 선언 var UserSchema; // 데이터베이스 모델 객체를 위한 변수 선언 var UserModel; //데이터베이스에 연결 function connectDB() { // 데이터베이스 연결 정보 // localhost:기본포트/데이터베이스명 var databaseUrl = 'mongodb://localhost:27017/test'; // 데이터베이스 연결 console.log('데이터베이스 연결을 시도합니다.'); // mongoose의 Promise 객체는 global의 Promise 객체 사용하도록 함 mongoose.Promise = global.Promise; mongoose.connect(databaseUrl, { useNewUrlParser: true }); database = mongoose.connection; database.on('error', console.error.bind(console, 'mongoose connection error.')); database.on('open', function () { console.log('데이터베이스에 연결되었습니다. : ' + databaseUrl); // 스키마 정의 UserSchema = mongoose.Schema({ email: String, password: String }, {versionKey: false}); // __v 삭제위해 console.log('UserSchema 정의함.'); // --------------------------------------------------- // 스키마에 static으로 findAll 메소드 추가(전체 출력 위해) UserSchema.static('findAll', function(callback) { return this.find({}, callback); }); // --------------------------------------------------- // UserModel 모델 정의 UserModel = mongoose.model("users", UserSchema); console.log('UserModel 정의함.'); }); // 연결 끊어졌을 때 5초 후 재연결 database.on('disconnected', function() { console.log('연결이 끊어졌습니다. 5초 후 재연결합니다.'); setInterval(connectDB, 5000); }); } //===== 라우팅 함수 등록 =====// // 회원가입 데이터베이스 app.post('/process/signup', function(req,res) { console.log('/process/signup 호출됨.'); // 요청 파라미터 확인 var paramEmail = req.body.email || req.query.email; var paramPassword = req.body.psw || req.query.psw; console.log('요청 파라미터 : ' + paramEmail + ', ' + paramPassword); // 데이터베이스 객체가 초기화된 경우, addUser 함수 호출하여 사용자 추가 if (database) { addUser(database, paramEmail, paramPassword, function(err, addedUser) { if (err) {throw err;} // 결과 객체 있으면 성공 응답 전송 if (addedUser) { console.dir(addedUser); res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>사용자 추가 성공</h2>'); res.end(); } else { // 결과 객체가 없으면 실패 응답 전송 res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>사용자 추가 실패</h2>'); res.end(); } }); } else { // 데이터베이스 객체가 초기화되지 않은 경우 실패 응답 전송 res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>데이터베이스 연결 실패</h2>'); res.end(); } }); //사용자를 추가하는 함수 var addUser = function(database, email, password, callback) { console.log('addUser 호출됨 : ' + email + ', ' + password); // UserModel 인스턴스 생성 var user = new UserModel({"email":email, "password":password}); // save()로 저장 : 저장 성공 시 addedUser 객체가 파라미터로 전달됨 user.save(function(err, addedUser) { if (err) { callback(err, null); return; } console.log("사용자 데이터 추가함."); callback(null, addedUser); }); }; //사용자 리스트 함수 app.post('/process/listuser', function(req,res) { console.log('/process/listuser 호출됨.'); // 데이터베이스 객체가 초기화된 경우, 모델 객체의 findAll 메소드 호출 if (database) { // 1. 모든 사용자 검색 UserModel.findAll(function(err, results) { // 에러 발생 시, 클라이언트로 에러 전송 if (err) { console.error('사용자 리스트 조회 중 에러 발생 : ' + err.stack); res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>사용자 리스트 조회 중 에러 발생</h2>'); res.write('<p>' + err.stack + '</p>'); res.end(); return; } if (results) { // 결과 객체 있으면 리스트 전송 console.dir(results); res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>사용자 리스트</h2>'); res.write('<div><ul>'); for (var i = 0; i < results.length; i++) { var curEmail = results[i]._doc.email; var curPassword = results[i]._doc.password; res.write(' <li>#' + i + ' : ' + curEmail + ', ' + curPassword + '</li>'); } res.write('</ul></div>'); res.end(); } else { // 결과 객체가 없으면 실패 응답 전송 res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>사용자 리스트 조회 실패</h2>'); res.end(); } }); } else { // 데이터베이스 객체가 초기화되지 않은 경우 실패 응답 전송 res.writeHead('200', {'Content-Type':'text/html;charset=utf8'}); res.write('<h2>데이터베이스 연결 실패</h2>'); res.end(); } }); // -------------------------------------------------------------------------- //===== 서버 시작 =====// // 프로세스 종료 시에 데이터베이스 연결 해제 process.on('SIGTERM', function () { console.log("프로세스가 종료됩니다."); app.close(); }); app.on('close', function () { console.log("Express 서버 객체가 종료됩니다."); if (database) { database.close(); } }); // Express 서버 시작 http.createServer(app).listen(app.get('port'), function(){ console.log('서버가 시작되었습니다. 포트 : ' + app.get('port')); // 데이터베이스 연결을 위한 함수 호출 connectDB(); }); // /public/listuser.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>사용자 리스트 테스트</title> </head> <body> <h1>사용자 리스트</h1> <br> <form method="post" action="/process/listuser"> <table> <tr> <td><label>아래 [전송] 버튼을 누르세요.</label></td> </tr> </table> <input type="submit" value="전송" name="" /> </form> </body> </html> |
'MongoDB' 카테고리의 다른 글
[MongoDB] - Mongoose 이용하여 데이터 수정하기 (4) (0) | 2018.11.24 |
---|---|
[MongoDB] - Mongoose 이용하여 일부 데이터로 로그인 인증 구현하기 (3) (0) | 2018.11.23 |
[MongoDB] - Mongoose 이용하여 데이터 삽입하기 (1) (0) | 2018.11.23 |
[MongoDB] - Mongoose __v 제거하기 (0) | 2018.11.23 |
[MongoDB] - Mongoose 모듈과 ODM (0) | 2018.11.23 |
댓글()