패키지 설치(자바 maven)
#npm init
name : (DatabaseExample) database_example
-- 모듈 설치
#npm install express --save
#npm install http --save
#npm install path --save
#npm install body-parser --save
#npm install cookie-parser --save
#npm install express-session --save
#npm install express-error-handler --save
#npm install express-error-handler --save
mongodb 버전 3.0이상을 사용할 때
버전 차이 주의
1. { useNewUrlParser: true }
2. database=db.db('local'); /*database명을 명시했다.*/
app2.js
var express =require('express'); var http=require('http'); var static=require('serve-static'); var path=require('path'); var bodyParser=require('body-parser'); var cookieParser=require('cookie-parser'); var session=require('express-session'); //에러 핸들러 모듈 사용 var expressErrorHandler=require('express-error-handler'); //mongodb 모듈 사용 var MongoClient=require('mongodb').MongoClient; var database; //데이터베이스 연결 function connectDB(){ var databaseUrl='mongodb://localhost:27017/local'; MongoClient.connect(databaseUrl, { useNewUrlParser: true },function(err, db){ if(err){ console.log('데이터베이스 연결 시 에러 발생함'); return; } console.log('데이터베이스에 연결됨 : ' + databaseUrl); database=db.db('local'); /*database명을 명시했다.*/ }); } var app=express(); app.set('port', process.env.PORT || 3000); //미들웨어 등록 시작 app.use('/public', static(path.join(__dirname, 'public'))); app.use(bodyParser.urlencoded({extended:false})); app.use(bodyParser.json()); app.use(cookieParser()); //세션 저장 app.use(session({ secret :"my key", resave:true, saveUninitialized:true })); //미들웨어 등록 끝 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); if(database){ console.log("DB 사용자 정보 인증 시작"); authUser(database, paramId, paramPassword, function(err, docs){ if(err) { console.log('에러 발생. '); res.writeHead(200, {"Content-Type": "text/html;charset=utf8"}); res.write('<h1>에러 발생</h1>'); res.end(); } if(docs){ console.dir(docs); res.writeHead(200, {"Content-Type": "text/html;charset=utf8"}); res.write('<h1>사용자 로그인 성공</h1>'); res.write("<div><p>사용자 : " + docs[0].name +'</p></div>'); res.write('<br><br><a href="/public/login.html">다시 로그인하기</a>'); res.end(); }else{ console.log('에러 발생. '); res.writeHead(200, {"Content-Type" : "text/html;charset=utf8"}); res.write('<h1>사용자 데이터 조회 안됨.</h1>'); res.end(); } }); }else{ console.log('에러 발생. '); res.writeHead(200, {"Content-Type" : "text/html;charset=utf8"}); res.write('<h1>데이터베이스 연결 안됨.</h1>'); res.end(); } }); //사용자 추가 router.route('/process/adduser').post(function(req, res){ console.log('/process/adduser 라우팅 함수 호출됨. '); var paramId=req.body.id || req.query.id; var paramPassword=req.body.password || req.query.password; var paramName=req.body.name || req.query.name; console.log('요청 파라미터 : ' + paramId + ' , ' + paramPassword + ' , ' + paramName); if(database){ addUser(database, paramId, paramPassword, paramName, function(err, result){ if(err){ console.log('에러 발생. '); res.writeHead(200, {"Content-Type": "text/html;charset=utf8"}); res.write('<h1>에러 발생</h1>'); res.end(); return; } if(result){ console.dir(result); res.writeHead(200, {"Content-Type" :"text/html;charset=utf8"}); res.write('<h1>사용자 추가 성공 </h1>'); res.write('<div><p>사용자 : ' + paramName+'</p></div>'); res.write('<br><br><a href="/public/login.html">다시 로그인하기</a>'); res.end(); }else{ console.log('에러발생.'); res.writeHead(200, {"Content-Type":"text/html;charset=utf8"}); res.write('<h1>사용자 추가 안됨.</h1>'); res.end(); } }); }else{ console.log('에러발생'); res.writeHead(200, {"Content-Type" : "text/html;charset=utf8"}); res.write('<h1>데이터베이스 연결 안 됨. </h1>'); res.end(); } }); app.use('/', router); var authUser =function(db, id, password, callback){ console.log('authUser 호출됨. '); console.dir(db); var users=db.collection('users'); console.dir(users); users.find({"id":id, "password":password}).toArray(function(err, docs){ if(err){ console.log('error'); callback(err, null); } if(docs.length >0){ console.log('일치하는 사용자를 찾음.'); 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); var server=http.createServer(app).listen(app.get('port'), function(){ console.log('익스프레스로 웹 서버를 실행함 : ' + app.get('port')) ; connectDB(); console.dir(database); }); //유저 받기 var addUser =function(db, id, password, name, callback){ console.log('addUser 호출됨 : ' +id +' ,' + password + ', ' + name); var users=db.collection('users'); users.insertMany([{"id":id, "password":password, "name":name}], function(err, result){ if(err){ callback(err,null); return; } if(result.insertedCount > 0){ console.log('사용자 추가됨 : ' + result.insertedCount); callback(null, result); }else{ console.log('추가된 레코드가 없음'); callback(null, null); } }); };
adduser.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>사용자 추가</title> </head> <body> <h1>사용자 추가</h1> <br> <form method="post" action="/process/adduser"> <table> <tr> <td><label>아이디</label></td> <td><input type="text" name="id"></td> </tr> <tr> <td><label>비밀번호</label></td> <td><input type="password" name="password"></td> </tr> <tr> <td><label>사용자이름</label></td> <td><input type="text" name="name"></td> </tr> </table> <input type="submit" value="전송" name="submit"> </form> </body> </html>
https://github.com/braverokmc79/nodejs_webproject1
댓글 ( 4)
댓글 남기기