Riucc's Storage
RSS
태그
관리
쓰기
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
Riucc's Storage

[MongoDB] - Mongoose 이용하여 데이터 전체 출력하기 (2)

MongoDB|2018. 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

댓글()
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
최근 등록 현황
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
달력
지난달
2025.5
다음달
일월화수목금토
123
45678910
11121314151617
18192021222324
25262728293031
태그 구름
  • 소켓
  • 이클립스 디비 연동
  • 정보처리산업기사 15년 필기
  • jsp
  • 데이터베이스
  • 정규화
  • nodejs MySQL 연동하기(Connection Pool)
  • 소켓 프로그래밍
  • 커널 모듈 프로그래밍
  • 정보처리산업기사 요약
  • 안드로이드 카카오 로그인
  • 정보처리산업기사 필기
  • 안드로이드 카카오 로그인 연동
  • 안드로이드 intent
  • 정규형
  • 정보처리산업기사 총정리
  • 정보처리산업기사 15년
  • 정보처리기사 실기 정리
  • 안드로이드
  • 정보처리산업기사 16년 필기
  • nodejs express
  • 자료구조
  • 리눅스
  • 이클립스 mysql 연동
  • 카카오 로그인
  • 카카오 로그인 연동
  • 정보처리산업기사 정리
  • 정보처리산업기사 필기 정리
  • 정보처리산업기사 16년
  • HTML
카운터
전체 방문자
오늘
어제
Skin by M1REACT. Designed by M1STORY.TISTORY.COM. Valid XHTML 1.0 and CSS 3. Copyright ⓒ Riucc's Storage. All rights reserved.

티스토리툴바