목록javascript/w3schools nodejs (30)
작업 노트
전체 소스코드 : https://github.com/imtaekh/my_app/tree/4485452eee5a48e94d2ee0b7892ef0181ba4302c테스트 사이트 : https://azure0777board.herokuapp.com 게시판 만들기의 마지막 강좌 댓글 기능입니다.사실 이 게시판에 잔 버그들이 많은데.. 그걸 강좌에서 계속 수정하기는 뭐하잖아요. 그래서 게시판 만들기 강좌는 이걸로 끝을 내고 게시판 프로젝트를 따로 만들어서 거기서 계속 발전시켜 나가겠습니다. models/Post.js입니다.사실 지금까지 게시판 구조는 SQL타입 DB(예를 들어mySql)나 NoSQL(예를 들어 MongoDB)랑 별반 차이가 없었습니다. 이번 댓글로 NoSQL DB의 가장 큰 특징이 나오게 되는데요..
전체 소스코드 : https://github.com/imtaekh/my_app/tree/6719b4d85ddb83c9e8a750c88d82727ac6e71620테스트 사이트 : https://azure0777board.herokuapp.com 게시판에 글번호와 조회수를 추가했습니다. 별로 길지 않으니까 한번에 포스팅합니다. models/Post.js입니다.조회수와 글번호는 Post모델에 저장합니다. routes/posts.js의 글번호 입력부입니다. mongoDB는 mysql처럼 자동으로 데이터 번호를 순서대로 달아주는 기능이 없습니다. 그래서 글번호를 다른 DB에 저장해야 하는데, counter모델 만든데다가 썼습니다. 카운터가 없으면 만들고, 있으면 마지막 값을 가져옵니다.그값에+1한 값을 글 작성시..
전체 소스코드 : https://github.com/imtaekh/my_app/tree/9f46aeefad36f701b0db8e3348c4ead2489b525a테스트 사이트 : https://azure0777board.herokuapp.com 게시판 검색의 마지막 포스팅은 검색어 highlight입니다. 검색이 제대로 되고 있는지 쉽게 알 수 있죠.searchType에 맞춰서 제목, 본문, 작성자의 이름에 검색어가 일치하는 부분을 자바스크립트를 써서 highlight합니다. routes/posts.js입니다. 어차피 검색기능의 일부니까, search object를 만들때 highlight를 같이 보내줍니다. 이미 index, show action에서 이 object를 view로 쏴주고 있으니, 해당 vi..
전체 소스코드 : https://github.com/imtaekh/my_app/tree/fd1d5067155e2fb839e609e09e22b499355fee19테스트 사이트 : https://azure0777board.herokuapp.com 작성자 검색 기능을 추가했습니다.작성자 검색기능은 두가지로, 작성자 이름의 일부가 일치하는 경우(author)와, 작성자 이름이 완전히 일치하는 경우(author!)로 searchType을 나눴고, body, title과는 다르게 author와 author!는 혼용할수 없습니다.즉 searchType은 아래의 조합이 가능합니다. body title author author! body,title body,author body,author! title,author ti..
전체 소스코드 : https://github.com/imtaekh/my_app/tree/f7bf33030d70da24bf756af96388ba71ad9af588테스트 사이트 : https://azure0777board.herokuapp.com 게시판에 검색 기능이 추가되었습니다.제목(title)검색, 본문(body)검색, 제목+본문(title+body)검색입니다.작성자 검색 방식이 조금 다르니 다음 포스팅에서.. routes/post.js파일입니다.search 오브젝트를 만드는 함수를 만들어서 mongoose query부분에 전달해 주고, view에서도 사용할 수 있게 view로도 전달해 줍니다.posts.js 제일 아래에 createSearch함수가 있습니다.별건 없고 Post.find()안에 검색할 ..
전체 소스코드 : https://github.com/imtaekh/my_app/tree/67eed1c385feb374d86c9f16f97c814e82a4ab9c테스트 사이트 : https://azure0777board.herokuapp.com 다음 포스팅에 검색기능을 추가해 볼텐데, 그 전에 자잘한 몇가지 수정이 있습니다. 1. 기능 수정- URL 상에 ~/posts&page=1와 같이 query에 페이지를 입력받아서 해당 페이지로 이동하는데, ~/posts 처럼 page query를 입력하지 않은 경우 현재 페이지가 굵은 글씨로 표시되지 않던 버그가 수정됐습니다.(또한 게시물 클릭시 page=NaN query가 추가되는 버그도 수정됐습니다)- URL query에 limit를 추가하여 한 페이지에 표시되..
전체 소스코드 : 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를 빼버리고 무조..