Nodejs

 

 

 

패키지 설치(자바 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

 

 

https://studio3t.com/

 

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

//mongoose 모듈 사용
var mongoose=require('mongoose');


var database;
var UserSchema;
var UserModel;

//데이터베이스 연결
function connectDB(){
    var databaseUrl='mongodb://localhost:27017/local';
    
    mongoose.Promise=global.Promise;
    mongoose.connect(databaseUrl);
    database=mongoose.connection;
    
    database.on('open', function(){
        console.log('데이터베이스에 연결됨 : ' + databaseUrl) ;
        
        
        UserSchema=mongoose.Schema({
                id:String,
                name:String,
                password:String
        });
        console.log('UserSchema 정의함.');
    
        UserModel=mongoose.model('users',UserSchema);
        console.log('UserModel 정의함.');
        
    });
    
    database.on('disconnected', function(){
        console.log('데이터베이스 연결 끊어짐.');
    });
    
    
    database.on('error', console.error.bind(console, 'mongoose 연결 에러. '));
        
    
    
}

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 호출됨. '+id+", " +password);
    
    
    
   // 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 user=new UserModel({"id":id, "password":password, "name":name});    
    
    user.save(function(err){
        if(err){
            callback(err, null);
            return;
        }
        
        console.log("사용자 데이터 추가함");
        callback(null, user);
    });
    
 
        
    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);
        }
        
    });
    
    
};




 

 

 

https://github.com/braverokmc79/nodejs_webproject1

 

 

 

 

 

about author

PHRASE

Level 60  라이트

강해지려면 흐르는 물처럼 되어야만 한다. 물이란 장애물만 없으면 유유히 흐르고 장애물이 있으면 흐르지 않는 법이다. 네모난 관이면 물은 네모나게 흐를 것이요 둥근 관이면 물은 둥글게 흐를 것이다. 물은 부드럽고 마음대로 흐르기 때문에 가장 불요불급(不要不急)하고도 강한 것이다. -노자

댓글 ( 4)

댓글 남기기

작성

Nodejs 목록    more