var express = require('express'), http = require('http'),

    path = require('path');

var router = express.Router();

// 라우터 객체 생성!

var ErrorH =  require('express-error-handler');

// 오류페이지 보내기 위한 핸들러 선언

var cookieParser = require('cookie-parser');

var expressSession = require('express-session');

var app = express();

var errh = ErrorH({

    static :{

        '404' : './public/404.html'

    }

});

app.use(ErrorH.httpError(404));

app.use(errh);

app.use(cookieParser());

app.use(expressSession({

    secret : 'my key',

    resave:true,

    saveUnintialized:true

}));

router.route('/process/product').get(function(req,res){

        console.log('product 호출');

        if(req.session.user){

            res.redirect('/public/product.html');

        }else{

            res.redirect('/public/login2.html');

        }

    });

router.route('/process/showCookie').get(function(req, res){

        console.log('/process/showCookie 호출');

        res.send(req.cookie);

        });

router.route('/process/setUserCookie').get(function(req,res){

    console.log('setuser 호출');

    res.cookie('user', {

        id :'mike',

        name :'sosi',

        authorized:true

    });

    res.redirect('/process/showCookie');

});


router.route('/process/login/').post(function(req,res){

    console.log('process/login check');

    var paramName = req.params.name;

    // 얘는 토큰이라 부른다.

    var paramId = req.body.id||req.query.id;

    var parPass = req.body.pass || req.query.pass;

    console.log('process/login check222');

    if(req.session.user){

        console.log('already login');

        res.redirect('/public/product.html');

    }else{

        console.log('process/login check333');

        req.session.user={

        id : paramId,

        name :'sosi',

        authorized:true

        };

    

    res.writeHead('200', {'Content-Type':'text/html;charset = utf8'});

    res.write('<h1> express server answer');

    res.write('<div><p>Param Name : ' +paramName + '</p></div>');

    res.write('<div><p>Param id :'+paramId + '</p></div>' );

    res.write('<div><p>param pass :' + parPass + '</p></div>');

    res.write(

    "<br><br><a href ='/public/login2.html'>go back</a>");

    res.end();

    }

});

router.route('/process/logout').get(function(req,res){

    console.log('logout');

    if(req.session.user){

        console.log('go logout');

        req.session.destroy(function(err){

            if(err){throw err;}

            console.log('session des');

            res.redirect('/public/login2.html');

        });

    }else{

        console.log('not yet login');

        res.redirect('/public/login2/html');

    }

});


var bodyParser = require('body-parser'), static = require('serve-static');

// static 미들웨어 불러오기


var app = express();

app.set('port', process.env.PORT||3000);


app.use(bodyParser.urlencoded({extended:false}));

// body-parser 활용

// application//www-xxx-xxx 주소를 파싱

// 즉 폴더안에 있는 페이지의 주소를 연결해줌!!

app.use(bodyParser.json());

// bp를 이용한 application/json 파싱

// 내용을 파밍하는듯?

app.use(static(path.join(__dirname, 'public')));

// 폴더명을 연결해줌!!

// public만 해주나?


app.use('/', router); //router을 app 객체에 등록


http.createServer(app).listen(3000, function(){

    console.log('server start');

});



이 부분은 서버 실행 + 로그인 + 세션 유지 파트이다.

기본적으로 특정 페이지 접속시 세션유무를 파악하여

세션이 있으면 페이즈를 응답하고

없으면 로그인 할 수 있도록 유도한다


근데 문제는 session 에러가 계속 뜸

TypeError: Cannot read property 'user' of undefined

분명 세션 사용과 if else를 통해 세션이 없을경우 저장 까지 할 수 있게 해놨는데

실행이 안된다.


내일 더 봐야할듯..

'Node.Js 도전(임시 마감)' 카테고리의 다른 글

Do.it과 함께하는 Node.js 5장  (0) 2018.04.30

해야지 해야지 하고 이제야 한다.

책 보고 따라치는 정도이지만 자바, 스프링과 최대한 비교하면서 리뷰해야지..


노드는 기본적으로 모듈을 임포트 해서 사용하는데

파이썬, 자바의 경우 import 클래스 한다 하면

노드는 require('모듈명') 으로 하고 이것을 객체로 받는다.


서버를 구성하기 위해선 기본적으로 http 모듈이 필요로 하나 이를 개선한 express를 사용한다.

하지만 http도 같이 씀?!


# 1. 임포트 하고 2.이것을 객체로 받아서 메서드를 사용한다.

var express = require('express'), http = require('http');

var app = express();

이제 app이란 객체를 활용해서 express의 메서드를 사용할 수 있다.


# 서버 생성하기

서버를 생성하기 위해선 http 모듈의 createServer를 사용한다.

기존에 http만 사용할 경우 createServer만 쓰면 됬지만

express 모듈을 같이 사용하므로 그 객체를 같이 넣어준다. 


http.createServer(app).listen(app.get('port'), function(){....

이런식으로.


# app.get('port') 가 가능한 이유는

위에선 언급안했지만 app.set('port', 3000) 으로 저장을 했기 때문


# 위 부분은 자바 스프링에서 서블릿 컨텍스트 설정을 하고 서버를 키는 것과 동일

# xml 등의 부분을 만질 필요가 없다는 점에서 간편한듯?


# 노드는 미들웨어와 라우터가 존재.

미들웨어는 일종의 함수라 생각하면 편할 듯. 즉 자바에서도 어노테이션으로 각 주소를 받고 그에 따른 함수를 지정한 것과 같다 생각하면 편할듯 하다.


# 미들웨어 생성은 use 메서드를 활용한다

app.use(function(req, res, next){... 이렇게


# next() 메서드는 다음 미들웨어로 넘어가기 위함이다.

# 아직 이 부분을 더 깊게 못들어가서 스프링과 비교하기 이름


# 주소 부분에서 ? 이후로의 값을 가져오려면

req.query.?명으로 받아오면 된다.

localhost:3000?name=kkk 라 할 경우 ? 뒤에 name을 받으면 된다

var name = req.query.name; 이런식으로


 

'Node.Js 도전(임시 마감)' 카테고리의 다른 글

Do it node, 세션 처리하기 중..  (0) 2018.05.07

+ Recent posts