[항해99] 65일차 🚨 검색api , 프리즈마, 3tier
항해 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
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
🚨 이우 이우 이우 이우 이우 이우🚨이우이우이우이우이우이우🚨 🚨 이우이우이우이우이우이우🚨 🚨 이우 이우 이우 이우 이우 이우.
'IT > Bootcamp 항해99' 카테고리의 다른 글
[항해99] 68일차 늙은 쥬니어 개발자는 슬퍼 (5) | 2021.08.14 |
---|---|
[항해99] 67일차 나도 개발 잘하고싶다 (4) | 2021.08.13 |
[항해99] 64일차 (2) | 2021.08.10 |
[항해99] 62일차 & 63일차 패스포트 지긋지긋해요 (4) | 2021.08.09 |
[항해99] 61일차 passport 꼭 끝내고말꺼야는 개뿔 프리즈마했어 (4) | 2021.08.07 |