목록분류 전체보기 (70)
작업 노트
전체 소스코드 : https://github.com/imtaekh/my_app/tree/487c3cd5823f759724a25d05dc3363b42c335b6f테스트 사이트 : https://azure0777board.herokuapp.com 방문자 카운터를 달았습니다. 예전엔 웹사이트들에 카운터가 많았는데, 요즘은 거의 없죠.옛날 기분을 느끼며 달아봤습니다.좌측 하단에 카운터가 생겼습니다.- 전체 방문자 수와 오늘의 방문자 수를 표시합니다.- 사이트 방문시에 브라우저에 쿠키를 생성하여 방문날짜를 기록합니다. 만약 같은 날짜에 재방문시에는 카운터가 증가하지 않습니다.- 브라우저에서 쿠키사용 금지를 설정한 경우에는 카운터가 증가하지 않습니다. count 정보를 DB에 저장하기 위해 DB schema를 만듭..
전체 소스코드 : https://github.com/imtaekh/my_app/tree/edd2d79605ad6f1cdf2c6313eac4a2328288301e 테스트 사이트 : https://azure0777board.herokuapp.com 여러분께서 게시판에 글을 남겨주셔서 글이 15개나 되었네요. 이제 슬슬 페이지가 필요할 때입니다. mongoose-pagination 이라는 package를 사용해도 되는데, 사실 크게 어렵지도 않고 mongo DB 공부도 할 겸 그냥 코딩하였습니다.참고로 페이지넣는 것을 영어로 pagination이라고 합니다. 아래쪽에 1, 2 라고 페이지가 표시되었죠. 현재 페이지는 진하게 표시되고, 클릭할 수 없게 하였습니다. 페이지가 별로 없으니까 한페이지에 표시되는 글을..
전체 소스코드 : https://github.com/imtaekh/my_app/tree/6eedd67e7658dc6c736ce94048b4b21814ea0664테스트 사이트 : https://azure0777board.herokuapp.com 강좌에서 만들었던 게시판이.. 너무 못생긴것 같아서 수정을 해봤습니다. CSS뿐만 아니라 view 전반을 다 뜯어고쳤습니다.javascript도 모든 form에서 작동하도록 개선하였고, 모바일 호환성또한 향상하였습니다.[출처] [Node.js 강좌] 게시판 디자인 개선및 브라우저 호환성 개선|작성자 azure0777
문제의 코드부분입니다. update시에 새로운 password가 있는 경우 form에서 받은 password를 user객체에 넣은 후 user.save()를 호출하고 있습니다. 암호는 hash로 변환 후에 저장되어야 하는데 user.save()함수(mongoose에 기본으로 제공) 실행 전에 hash를 생성하도록 user schema에 설정해 뒀기 때문이죠.User.create시에도 user.save()가 호출되어서 hash를 생성합니다.다만 위의 코드의 경우 newPassword가 있는 경우에 user.save()가 호출되고 req.body.user.password의 값이 다시 User.findByIdAndUpdate에서 사용되므로 다음번 로그인 시에 문제가 생깁니다. 단순하게 else를 빼버리고 무조..
이 포스팅은 [nodeJS/Express] 12. heroku(헤로쿠/히로쿠)써서 인터넷에 올리기 1 에서 이어집니다. 위와 같이 내 컴퓨터에서는 잘 작동하는 웹사이트가 히로쿠에서는 작동하지 않는 경우가 있습니다. 일단 무슨프로그램이든지 에러가 나면 에러메세지를 확인하면 됩니다. 하지만 위에 보이는 에러메세지는 별로 도움이 되지 않네요. 개발자만 볼 수 있는 에러가 아니고, 사이트에 접속하는 사람은 누구든지 볼 수 있는 페이지이기 때문에 에러를 상세하게 알려주지 않기 때문입니다. 그럼 진짜 에러메세지를 봅시다. 사실 에러메세지가 아니라 프로그램실행의 기록을 열람하는 것입니다.앱안에 console.log의 메세지가 출력되는 곳이기도 합니다. $ heroku logs 위에서 부터 순서대로 읽어내려오면 상세한..
드디어 마지막입니다!! 이 포스팅에서는 nodeJS로 만든 웹 어플리케이션을 '히로쿠'를 사용해서 온라인에 올려보겠습니다. 히로쿠 역시 github과 같이 git 저장 웹사이트인데, github이 단순히 코드 저장과 공유를 하는 목적이라면, 히로쿠는 서버를 제공해서 웹사이트를 실행할 수 있게 해줍니다. 가입은 무료이며 유료 package를 구매할 수 있습니다. 무료로 사용하는 경우 몇가지 제약이 있지만 연습용, 발표용, 포트폴리오용으로는 딱 좋습니다. 1. 무료버전은 30분간 웹사이트에 접속자가 없는 경우 어플리케이션이 정지하고 접속시에 서버가 재부팅하게 됩니다. 즉 처음접속시에 시간이 10초 정도 걸립니다. 2. 한 아이디로 5개까지 웹사이트를 등록할 수 있습니다. 3. 웹사이트가 하루에 6시간동안 꺼..
지금까지 view를 제외한 모든 코딩을 app.js에서만 해왔지만, 일반적으로 정리를 위해 파일을 나누어서 코딩을 하게 되고 이렇게 나누어 진 파일들을 모듈(module)이라고 합니다. 강의 제목은 refactor라고 붙였지만 일반적으로 refactor는 코드를 정리하는 것으로, 테스트용으로 만든 코드를 다른 사람이 이해하기 쉽게 정리하는 과정입니다. 변수명을 정리한다든지, 정렬을 바로잡는다든지, 쓸때 없는 부분을 지우고 다듬는 과정입니다.사실 따지고 보면 전 항상 강의를 올리기 전에 refactor를 한 셈이죠. app.js에서 passport, routes, models을 때어 낼 텐데요, 사실은 app.js를 다 만든다음 부분부분을 때어내는 것이 아니라, 각 부분을 처음 만들때부터 분리해서 만드는 ..
이전 포스팅에서 코드가 좀 복잡했던 게시글 수정, 삭제 부분의 좀더 깔끔한 방법을 생각해 냈습니다! 우선 이전 코드입니다. 1. findById로 게시글을 찾습니다.2. req.user._id.equals(post.author)로 로그인한 계정과 글 작성자를 비교합니다.3. 일치하는 경우 findByIdAndUpdate/findByIdAndRemove 로 글을 수정, 삭제합니다.DB를 두번 접근하기 때문에 에러확인도 두번들어갑니다. 아래는 수정한 버전입니다. 1.findOneAndUpdate/findOneAndRemove를 써서 게시글을 찾되, 검색 조건에 _id와 작성자를 동시에 검색합니다.2.일치되면 수정, 삭제가 이루어 지고 일치하는 자료가 없으면 업다고 에러를 내게 됩니다.DB접근을 한번만 하게 ..
게시글에 유저를 연결해서, 게시물에 글쓴이를 표시하고, 로그인한 계정과 글쓴이가 일치하는 경우 글을 수정, 삭제할 수 있게 해봅시다. 첫째로 게시글에 유저 정보를 담아야 합니다. 두개의 data에 relationship을 만드는 것이죠. 지난번 포스팅에서 말했던 것 처럼, _id는 단순한 문자열이 아닙니다. _id를 담기 위해서는 mongoose.Schema.Tyopes.ObjectId로 표시해야 합니다. 그리고 ref:'user'를 통해서 이 항목이 user collection을 가리키고 있다는 것을 나타내어 줍니다. 본격적으로 코드를 수정하기 전에, 기존의 게시글들을 다 지워줍니다. 새로운 항목을 사용해야 하는데, 그 항목이 없는 이전의 게시글들은 에러를 발생합니다. 물론 null체크를 하여 기존의 ..
지난 포스팅에서 만든 유저는 password 문자열이 그대로 DB에 저장되기 때문에 해커에 의해 DB가 해킹당할 경우 password가 그대로 해커의 손에 들어가게 됩니다.사이트의 보안성을 높히기 위해 password를 암호화하게 되는데, 저는 bcrypt라는 방법으로 password를 암호화 하겠습니다. bcrypt는 문자열을 hash로 바꾸어 주는데, DB에는 실제 password 대신 이 hash가 저장되게 됩니다. 만약 해커가 이 hash값을 취득하게 되더라도 실제 password를 알 수가 없습니다. 왜냐하면 문자열을 hash로 만들 수는 있지만, hash는 문자열로 되돌릴 수 없게 되어 있기때문입니다. 그럼 어떻게 이 hash를 사용하냐면, hash를 문자열로 되돌릴 순 없지만, 입력받은 문자..