개발/Project2024. 11. 9. 15:24프로젝트 시작전 정리

1. 사용할 패키지들 node.js는 기존에 브라우저 안에서만 사용되던 언어였지만 브라우저 밖에서도 사용하기 위해 만들어졌으며, 프론트엔드와 백엔드에서 동시에 사용할 수 있다는 장점이 있다. node.js에는 npm을 통해 패키지를 관리한다. npm init을 사용하여 프로젝트를 생성하고 나면 package.json이 생성된다. json은 데이터를 전송할 때 사용하는 양식이며 package.json에는 해당 프로젝트의 패키지를 관리하기 위한 문서다. 우리가 npm을 사용하여 설치한 모든 것들은 package.json의 dependencies에 기록된다. dependencies는 프로젝트를 실행하기 위한, devDependencies는 개발자를 위한 패키지들이다. express라는 node.js의 프레임워..

개발/Node.js2024. 11. 8. 23:13Cookie Session / Express-Session / Locals

1. Cookie Session (1)  - 이전까지는 account가 존재하는지, account의 password가 맞는지만 확인하였음 - 이제는 서버가 로그인을 시도한 유저를 기억하는 방법을 알아야 함 - 그 방법 중 하나가 cookie이며, cookie를 이해하기 전 먼저 session에 대해 알아야 함 - session이란, 백엔드와 브라우저 간에 어떤 활동(history)을 했는지 기억(memory)하는걸 말함   - 백엔드와 브라우저간 정보가 있어야 됨 - 현재 home으로 이동하면 GET request가 발생하는데, 백엔드에서 HTML을 render하고 나면 연결이 끝남   - 즉 연결이 지속되지 않는 무상태(stateless)   - request를 받고 처리되면 서버도 브라우저도 곧바로 ..

개발/Node.js2024. 11. 8. 11:34Login / Bcrypt Compare

1. Login// userController.jsexport const postJoin = async (req, res) => { const { email, username, password1, password2, name, location } = req.body; if (password1 !== password2) { return res.status(400).render("join", { pageTitle: "Join", errorMessage: "Password confirmation does not match.", }); } const exists = await User.exists({ $or: [{ username }, { email }] }); if (ex..

개발/Node.js2024. 11. 8. 10:46Status Code

1. Status Code - 우리가 회원가입을 하고 나면 보통은 브라우저가 아이디와 비밀번호를 저장할건지를 묻는 창이 뜸 - 하지만 회원가입이 정상적으로 완료되었는가를 브라우저가 확인했는지 여부는 여전히 우리가 알 수 없음   - 우리의 회원가입 화면에서는 중복되는 email이나 username이 있으면 여전히 에러메세지가 출력되기 때문 - https://en.wikipedia.org/wiki/List_of_HTTP_status_codes List of HTTP status codes - WikipediaFrom Wikipedia, the free encyclopedia This is a list of Hypertext Transfer Protocol (HTTP) response status codes..

개발/Node.js2024. 11. 7. 21:47User Authentication / Hash

1. Hash - 해킹과 같은 위험에 대비하게 위해 암호를 hash 할거임 - hash는 일방향 함수이며 문자열이 필요 - https://www.npmjs.com/package/bcrypt - 우리는 DB에 암호를 그냥 저장하지 않고, 해싱된 암호를 저장 bcryptA bcrypt library for NodeJS.. Latest version: 5.1.1, last published: a year ago. Start using bcrypt in your project by running `npm i bcrypt`. There are 7172 other projects in the npm registry using bcrypt.www.npmjs.com - 해커가 해싱된 암호를 가지고 공격을 하는걸 rai..

개발/Node.js2024. 11. 7. 15:50User Model

1. 유저 CRUD - 지금까지 video를 CRUD 하면서 배운 것들에 Authentication까지 추가 할 거임 - 유저가 로그인하는 것까지 구현하면서 로그인이 어떤 의미인지를 알아볼 예정 - 그리고 로그인한 유저를 어떻게 기억할지 구현 - 유저 생성에 관한 것들을 배우면서 깃허브에 로그인 하는 것 까지 구현 - 요약하면 ID는 이메일로, 거기에 비밀번호를 추가하고, 깃허브로 소셜 로그인 2. Schema 구성 - Video Model을 만들때와 똑같은 순서 - userSchema를 만들어 MongoDB와 mongoose에 User가 어떻게 생겼는지 알려줌 - static을 만들고 모델을 export 할 예정 - 그리고 이제 globalRouter 대신 rootRouter로 이름을 바꿀 예정// U..

개발/Node.js2024. 11. 5. 14:48Delete and Search Video

1. Delete Video - 삭제는 template, controller, router 모두 사용해야 됨 - findOneAndDelete와 findOneAndRemove의 차이   - mongoose api에도 나와있지만 웬만하면 findOneAndDelete를 사용하면 된다고 나와있음   - 근데 findByIdAndDelete는 findOneAndDelete({ _id: id })를 줄인 것이므로 findByIdAndDelete 사용   - https://github.com/Daniel-Jeon/wetube-loaded/commit/79eb465f1ee8d6347536ca6c4e444c0b310ad2a9 Delete Video !! · Daniel-Jeon/wetube-loaded@79eb465..

개발/Node.js2024. 11. 4. 19:57Mongoose Middleware(2)

1. findByIdAndUpdate Middleware 생성 - 현재 findOneAndUpdate를 위한 middleware은 있는데 findByIdAndUpdate를 위한 middleware가 없음 - findByIdAndUpdate는 findOneAndUpdate을 호출하는데 findOneAndUpdate는 save hook을 호출하지 않음 - findOneAndUpdate에서는 업데이트하려는 문서에 접근할 수가 없음videoSchema.pre("save", async function () { this.hashtags = this.hashtags[0] .split(",") .map((word) => (word.startsWith("#") ? word : `${word}`));});  ..

개발/Node.js2024. 11. 4. 19:11Mongoose Middleware(1)

1.  DeprecationWarning - findByIdAndUpdate를 사용하니 DeprecationWarning라는 경고가 발생함 - 경고 메시지에 나온데로 useFindAndModify를 db에 추가하면 됨// db.jsmongoose.connect("mongodb://127.0.0.1:27017/wetube", { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify: true,}); - mongoose가 오래된 것들을 처리하는 방법이라 시키는데로 하면 됨 2. Middleware를 통한 Hashtag 처리 - 현재는 영상을 업로드하거나 수정할 때, model에 저장하기 전에 hashtag를 처리함 - 하지만 영상을 저장하..

개발/Node.js2024. 11. 4. 17:35Edit Video

1. 영상이 없을 경우export const watch = async (req, res) => { const { id } = req.params; const video = await Video.findById(id); if (!video) { return res.render("404", { pageTitle: "Video not found!" }); } return res.render("watch", { pageTitle: video.title, video });}; - exec()를 붙인다고 해서 달라지는 건 없고 mongoose에서는 우리가 exec()를 호출하면 promise를 return함   - 우리는 async await을 사용중이므로 상관없으니 삭제 - 하지만 누군가가 없는 v..

image