[항해99] 65일차 🚨 검색api , 프리즈마, 3tier

IT/Bootcamp 항해99|2021. 8. 11. 08:44

 


항해 99

 

65일 차 :

 

🚨 이우 이우이우이우이우이우🚨.  No1 bullshit guy 이우이우   계속 생각난다.... 머지 드디어 미쳤나 

https://www.youtube.com/watch?v=3i5QLignVpc 

 

 

 

 passport를 끝냈는데 아쉬움이 아직 많이 있다.

typescript를 제대로 모르고 해서 그냥  타입 에러 무시하고 일단 무조건 기능 구현에만 집중하여 넘어갔다.

게다가  어저께 상현님과 예지님한테 물어본  serializeUser , jwt관련 부분도 공부를 더 해야 할 것 같다.

 


  passport.serializeUser((user, done) => { // Strategy 성공 시 호출됨
    done(null, user); // 여기의 user가 deserializeUser의 첫 번째 매개변수로 이동
  });

  passport.deserializeUser((user, done) => { // 매개변수 user는 serializeUser의 done의 인자 user를 받은 것
    done(null, user); // 여기의 user가 req.user가 됨
  });

일단 passport는 

serializeUser 를통해서 로그 인성 공시 done(null , targetuser)에서 user를 받아서 세션에 저장을 한다.

deserializeUser는  받은   

//serialize
// get info -> put it in cookie
passport.serializeUser((targetUser, done) => {

    console.log(targetUser,"here from 16" )
    done(null, targetUser.profile.id); // req.session.passport.user 저장?

})

//deserialize
// get cookie and find the user 
passport.deserializeUser((id, done) => {
    //token 비교
    // token을 까서 나온 user정보  db조회
    User.findUnique({where:{googleId: id}}).then((user) => {
        done(null, user)
    })
})

 

이걸 보고 jwt 토큰을  cookie , local storage , session storage로 넣어서 보내려고 했는데

안됐다. 

흠 생각해보니 , 안 되는 게 당연한 거 아닌가?   머리 빠가냐   되긴 한가 본데 안 좋다는데?  머리 진짜 빠가냐

If you store it inside localStorage, it’s accessible by any script inside your page (which is as bad as it sounds, as an XSS attack can let an external attacker get access to the token).

https://anil-pace.medium.com/json-web-tokens-vs-oauth-2-0-85dd0b32057d

 

JSON Web Tokens vs Oauth 2.0

JWT, Oauth 2.0, openId, Security

anil-pace.medium.com

게다가 시리얼라이즈 유저를 안 써도 돌아는 간다...

이게 뭐지?  공부를 좀 더 해보고 상현님한테 물어보러 가야겠다...

 

 

 

 

https://youtu.be/GihQAC1 I39 Q

 

 

dotenv  npm을 깔아서 사용하면 

github에 노출되면 안 되는 것들을  dotenv에 넣어놓고 

가져와서 쓸 수가 있다. 

 

근데 아래처럼  멍청하게 = 가아니라 : 를 써서 한 시간 동안 삽질했다. 😀

인제는 삽질을 잘하게 된 건지 옛날보다 삽질하는 시간이 줄어들었다. 


GOOGLE_CLIENT_ID : "017354121615-7weeoww72rc85wee4q2231owww5weee.apps.googleusercontent.com"
GOOGLE_SECRET: "TfGi1fpU3CTWeeOwwcDdduSre"
COOKIE_KEY:"wakakakaka"

 

 

 

 

2. pagenation

 

1page에 보이는 몇 개를 보여줄 건가 설정 가능 

 

https://www.prisma.io/docs/concepts/components/prisma-client/pagination

 

Pagination (Reference)

Prisma Client supports both offset pagination and cursor-based pagination. Learn more about the pros and cons of different pagination approaches and how to implement them.

www.prisma.io

 

 

 

contains : to implement the search api

 

https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#filter-conditions-and-operators

 

Prisma Client API (Reference)

API reference documentation for Prisma Client.

www.prisma.io

 

 

일단 포스트 테이블에서 검색을 했을 때,

제목과 내용에 키워드가 있는지  확인을 contains으로 한 것을 OR로 묶어줬다.

ex  제목이나 내용에 keyword값이 있으면 => count => 검색 후 결과 개수 확인

그리고 그 내용들을 반환해줬다.


import { prisma } from xx
import keywordValidator from xx 

export default async (DTO: keywordValidator) => {
  const Post = prisma.post
  console.log("hi")
  const resultNumber = await prisma.post.count({

    where: {
      OR: [
        {
          title: {
            contains: DTO,
          },
        },
        {
          content: {
            contains: DTO,
          },
        },
      ],
    },
    })


    const result = await prisma.post.findMany({
      where: {
        OR: [
          {
            title: {
              contains: DTO,
            },
          },
          {
            content: {
              contains: DTO,
            },
          },
        ],
      },
      })
    console.log(result)
    
   let searchResult = {resultNumber, result}
   return searchResult
}

일단은 이렇게 했는데 이렇게 하는 게 맞는 건지 모르겠다?  생각보다 쉬운 것 같은데? 뭐를 놓치고 있는 거지.

 

 

 

여기서 쓰는 querystring , 에서   where 값을 가져오는 걸 봤는데, 이걸  지금 서비스되고 있는 커뮤니티에서도 저렇게 쓰는 것 같다.

저건 뭘까? 

https://dololak.tistory.com/95

 

[Node.js] url, querystring 모듈 사용법

url 모듈 url을 다룰 수 있는 모듈로 url 모듈과 querystring 모듈이 있습니다. var url = require('url'); url은 다음과 같이 url 정보를 다룹니다. // 주소 문자열을 URL 객체로 만들기 var curURL = url.parse(..

dololak.tistory.com

 

 

 새로 배운 3 tier 개념. 

3 tier : separation of  front-end , back-end , database

https://www.ibm.com/cloud/learn/three-tier-architecture

 

 

🚨 이우 이우 이우 이우 이우 이우🚨이우이우이우이우이우이우🚨 🚨 이우이우이우이우이우이우🚨 🚨 이우 이우 이우 이우 이우 이우. 

반응형

댓글()