//사용자 로그인 하기
/*
npm install express --save
npm install http --save
npm install path --save
npm install body-parser --save
npm install cookie-parser --save
npm install serve-static --save
npm install errorhandler --save
npm install express-error-handler --save
npm install express-session --save
npm install mongodb --save
*/
//Express 기본 모듈 불러오기
var express = require('express')
,http = require('http')
,path = require('path');
//Express의 미들웨어 불러오기
var bodyParser = require('body-parser')
, cookieParser = require('cookie-parser')
, static = require('serve-static')
, errirHandler = require('errorhandler');
//오류 핸들러 모듈 사용
var expressErrorHandler = require('express-error-handler');
//Session 미들웨어 불러오기
var expressSession = require('express-session');
//익스프레스 객체 생성
var app = express();
//서버에서 사용할 포트 정보를 설정함
app.set('port', process.env.PORT || 3000);
//use() : 모듈을 사용할 수 있도록 만들어주는 메소드
//body-parser를 사용해 application/x-www-form-urlencoded 파싱
app.use(bodyParser.urlencoded({extended: false}));
//body-parser를 사용해 application/json 파싱
app.use(bodyParser.json());
//public 폴더를 static으로 오픈
app.use('/public', static(path.join(__dirname, 'public')));
//public 폴더를 static으로 오픈
app.use(cookieParser());
//세션 설정
app.use(expressSession({
secret : 'my key',
resave : true,
saveUninitialized : true
}));
//데이터베이스연결!!!!!!!!
var MongoClient = require('mongodb').MongoClient;
//데이터베이스 객체를 위한 변수 선언
var database;
//데이터베이스 연결
function connectDB(){
//데이터베이스 연결 정보
//형식 : mongobd://%IP정보%:%포트정보%/%데이터베이스이름%
var databaseURL = 'mongodb://localhost:27017/local';
//데이터베이스 연결
//connect(연결URL, callback함수)
MongoClient.connect(databaseURL, function(err, db){
if (err) throw err;
console.log('데이터베이스에 연결되었습니다. : ' + databaseURL);
//database 변수에 할당
//mongodb 3.0이상일 경우 DB이름 명시 필수!
database = db.db('local');
});
}
//라우팅 함수
//라우터 객체 참조
var router = express.Router();
// 로그인 라우팅 함수 - 데이터베이스의 정보와 비교
router.route('/process/login').post(function(req, res) {
console.log('/process/login 호출됨.');
// 요청 파라미터 확인
var paramId = req.body.id || req.query.id;
var paramPassword = req.body.password || req.query.password;
console.log('요청 파라미터 : ' + paramId + ', ' + paramPassword);
// 데이터베이스 객체가 초기화된 경우, authUser 함수 호출하여 사용자 인증
if (database) {
authUser(database, paramId, paramPassword, function(err, docs) {
if (err) {throw err;}
// 조회된 레코드가 있으면 성공 응답 전송
if (docs) {
console.dir(docs);
// 조회 결과에서 사용자 이름 확인
var username = docs[0].name;
res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
res.write('<h1>로그인 성공</h1>');
res.write('<div><p>사용자 아이디 : ' + paramId + '</p></div>');
res.write('<div><p>사용자 이름 : ' + username + '</p></div>');
res.write("<br><br><a href='/mongoDB/public/login.html'>다시 로그인하기</a>");
res.end();
} else { // 조회된 레코드가 없는 경우 실패 응답 전송
res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
res.write('<h1>로그인 실패</h1>');
res.write('<div><p>아이디와 패스워드를 다시 확인하십시오.</p></div>');
res.write("<br><br><a href='/mongoDB/public/login.html'>다시 로그인하기</a>");
res.end();
}
});
} else { // 데이터베이스 객체가 초기화되지 않은 경우 실패 응답 전송
res.writeHead('200', {'Content-Type':'text/html;charset=utf8'});
res.write('<h2>데이터베이스 연결 실패</h2>');
res.write('<div><p>데이터베이스에 연결하지 못했습니다.</p></div>');
res.end();
}
});
//라우터 객체 등록
app.use('/', router);
//사용자 인증하기!!
var authUser = function(database, id, password, callback){
console.log('authUser 함수 호출!!');
//database.collection : 'users' 컬렉션 참조
var users = database.collection('users');
//아이디와 비밀번호 사용하여 검색하기
users.find({"id" : id, "password" : password}).toArray(function(err,docs){
if(err){
callback(err,null);
return;
}
if(docs.length>0){
console.log("아이디[%s], 비밀번호[%s]가 일치함.", id, password);
callback(null,docs);
}else{
console.log("아이디 또는 비밀번호가 일치하지 않음.")
callback(null,null);
}
});
}
//===== 404 오류 페이지 처리 =====//
var errorHandler = expressErrorHandler({
static:{
'404' : 'public/404.html'
}
});
app.use(expressErrorHandler.httpError(404));
app.use(errorHandler);
//===== EXPRESS 서버 시작 =====/
http.createServer(app).listen(app.get('port'), function(){
console.log('서버가 시작되었습니다. 포트 : ' + app.get('port'));
//데이터베이스 연결
connectDB();
});
1. MongoClient를 사용하여 노드와 몽고디비를 연결시킨다.
==>MongoClient.connect(데이터베이스 주소, 콜백함수) 를 사용한다!
2. 사용자 인증 함수 생성
=> 몽고디비에서 생성된 'users' 컬렉션을 가져와서 변수에 담아준 다음
변수.find()함수를 사용해 요청된 값을 객체에 담아준다. 그러면 요청된 값과 디비에 있는 데이터들을 비교한다!
콜백함수 아직 어려운거 같다..
'Nodejs 공부하기!' 카테고리의 다른 글
router함수! (0) | 2020.12.01 |
---|---|
미들웨어 종류! (0) | 2020.11.29 |
parse(), format(), querystring.stringify() (0) | 2020.08.23 |