반응형

유튜브 클론 36

[JavaScript, Node.js] 유튜브 클론 정리 8장 (5) - 비디오 업로더

머리글 이번 시간에는 각 영상의 업로더를 표시하는 방법과 본인 영상의 경우 수정이 가능하도록 하는 법을 알아보자. 비디오 업로더 우선 기존에 했던 작업들을 조금씩 수정해주어야 한다. 우선 컨트롤러를 수정하자. const video = await Video.findById(id); -> const video = await Video.findById(id).populate("owner"); ... 우선 아이디를 기반으로 찾았던 비디오를 populate를 통해 검색해 주었다. populate는 Mongoose의 기능이다. 이는 문서의 지정된 경로를 다른 컬렉션의 문서로 자동 교체하는 프로세스이다. 쉽게 풀어서 설명하면 비디오뿐 아니라 비디오 owner의 정보도 같이 넘기겠다는 얘기다. 그리고 비디오의 업로드를..

[JavaScript, Node.js] 유튜브 클론 정리 8장 (4) - 유저 프로필 페이지

머리글 이번 시간에는 유저의 프로필 페이지를 제작해 보자. 기존에 했던 작업과 큰 차이가 없다. 유저 프로필 페이지 헤더에 프로필 주소로 갈 공간을 만들자. ... li a(href=`/users/${loggedInUser._id}`) My Profile ... 로그인 한 유저의 아이디를 통해서 접근을 하기로 했다. 그리고 유저 프로필 페이지 접근을 위한 컨트롤러를 제작해 보자. export const see = async (req, res) => { const { id } = req.params; const user = await User.findById(id); if (!user) { return res.status(404).render("404", { pageTitle: "User not found..

[JavaScript, Node.js] 유튜브 클론 정리 8장 (3) - 비디오 업로드

머리글 이번 시간에는 비디오를 업로드해보자. 비디오 업로드 우선 파일 업로드와 마찬가지로 업로드할 자리를 만들어주자. form(method="POST", enctype="multipart/form-data") label(for="video") Video File input(type="file", accept="video/*", required, id="video", name="video") 모든 형식의 비디오를 accept 했고, required 옵션으로 필수로 넣게 지정했다. 그리고 multer를 사용하기 위해 enctype를 설정해 주었다. 그리고 미들웨어를 생성해 주자. 기존의 아바타와 같은 미들웨어를 사용해도 상관은 없지만, 파일 사이즈의 제한을 위해서 하나 더 생성해 보자. export cons..

[JavaScript, Node.js] 유튜브 클론 정리 8장 (2) - 유저 아바타, 파일 업로드(Multer)

머리글 이번 시간에는 유저의 아바타 기능을 위해 파일 업로드 하는 방법을 알아보자. 파일 업로드 우선 업로드를 위해선 업로드할 공간을 만들어줘야 한다. 프로필 수정 페이지를 변경해 주자. form(method="POST", enctype="multipart/form-data") label(for="avatar") Avatar input(type="file", id="avatar", name="avatar", accept="image/*") ... label과 아바타 파일을 업로드하기 위한 input을 만들어주었다. 그리고 이미지 형식만 선택할 수 있게 accept 항목을 정해주었다. 그리고 미들웨어를 사용해야 하는데 이를 설치해 보자. npm i multer Multer는 파일을 업로드할 수 있게 해 준..

[JavaScript, Node.js] 유튜브 클론 정리 8장 (2) - 비밀번호 수정

머리글 이번 시간에는 유저의 비밀번호를 변경하는 방법에 대해서 알아보자. 비밀번호 변경 앞서 유저의 정보를 변경했던 것과 크게 차이가 없다. 일단 페이지를 하나 생성해 주자. extends ../base block content form(method="post") input(placeholder="Old Password") input(placeholder="New Password") input(placeholder="New Password Confirmation") input(value="Change Password", type="submit") 그리고 라우터도 만들어주자. ... userRouter .route("/change-password") .all(protectorMiddleware) .get(..

[JavaScript, Node.js] 유튜브 클론 정리 8장 (1) - 유저 프로필 수정, Middleware 추가

머리글 프로필 수정 우선 프로필을 수정하기 위해 적당히 페이지를 하나 만들어 줍시다. 이미 여러 번 다뤘던 내용이므로 자세한 내용은 생략하고 넘어갑시다. extends base block content form(method="POST") input(placeholder="Name", name="name", type="text", required, value=loggedInUser.name) input(placeholder="Email", name="email", type="email", required, value=loggedInUser.email) input(placeholder="Username", name="username", type="text", required, value=loggedInUse..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (11) - Logout, 복습

머리글 이번 시간에는 로그아웃에 대해 알아보자. Logout 로그아웃은 굉장히 간단하게 구현이 가능하다. export const logout = (req, res) => { req.session.destroy(); return res.redirect("/"); }; 이런 식으로 session을 destroy 하게 되면 로그아웃이 가능하다. 마무리 로그아웃까지 구현하며 7장에서의 모든 내용을 마무리했다. 계정을 생성하는 방법을 배웠고, 상태 코드에 대해서도 알아보았으며, 로그인을 구현하는 방법도 배웠다. 또한, 세션과 쿠키에 대해서 배웠고 로그인 상태로 만드는 법도 알아보았으며 환경 변수등과 같은 부가적인 요소도 배웠다. 끝으로 이를 종합하여 github의 api를 이용해서 github 로그인도 구현해 보..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (10) - Github Login3

머리글 깃허브 로그인을 계속 진행해 보자. Github Login 지난 시간 액세스 토큰을 통해 gtihub api url에 fetch를 진행했다. 하지만 user의 정보가 private 상태라면 정보를 얻을 수 없는 문제가 있었는데 이를 해결해 보자. const apiUrl = "https://api.github.com"; const userData = await ( await fetch(`${apiUrl}/user`, { headers: { Authorization: `token ${access_token}`, }, }) ).json(); const emailData = await ( await fetch(`${apiUrl}/user/emails`, { headers: { Authorization: ..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (9) - Github Login2

머리글 깃허브 로그인 파트를 계속 진행해 보자. Github Login 저번 시간에 유저가 다시 리다이렉트 할 수 있게끔 만들었다. 그 이후에 진행을 알아보자. 우리는 유저의 리다이렉트와 함께 깃허브를 통해 토큰을 받았다. 이 토큰을 Access 토큰으로 변경해 주는 작업이 필요하다. 컨트롤러를 수정해서 작업을 해보자. export const finishGithubLogin = async (req, res) => { const baseUrl = "https://github.com/login/oauth/access_token"; const config = { client_id: process.env.GH_CLIENT, client_secret: process.env.GH_SECRET, code: req.q..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (8) - Github Login1

머리글 이번 시간에는 깃허브 로그인을 구현해 보자. Github Login 우선 흐름을 간단히 살펴보자. 우선 사용자를 깃허브(로그인하려 하는 사이트)로 보낸다. 그러면 사용자는 해당 사이트에 로그인을 한다. 우리의 사이트에 대한 정보 접근 권한을 승인하고 깃허브는 우리에게 사용자를 돌려보낸다. 이 단계에서 token을 같이 redirect 해준다. 이 token을 통해 사용자의 정보를 받아올 수 있다. 우선 기본적으로 설정을 진행해 보자. 깃허브의 세팅으로 들어가 준다. 그리고 목록의 Developer settings에 들어가 준다. 그리고 OAuth Apps를 클릭하자. 그리고 New OAuth App을 클릭하면 다음과 같이 뜬다. 이름은 아무거나 넣어주고, URL은 'http://localhost:..

반응형