Node.js + Express.js + GraphQL + @ApolloServer
import { expressMiddleWare } from "@apollo/server/
const server = new ApolloServer({
typeDefs,
resolvers
});
app.use('/api', cors(), express.json(), expressMiddleWare({
context: async ({req}) => {
return {models}
});
}));
와,..이거 @apollo/server 버전업 되면서 달라진것때문에 몇일이 순삭...해결되는 것은 없고..답답했는데 ㅠ
혹시 저와같은 바보 멍팅이는 없길 바라며...ㅎ
일단 리졸버(쿼리, 뮤테이션)간의 공유 데이터(Shared Data)를 위해 context를 사용하는 부분이 이전 버전의 @apollo/server와 조금 달라진 부분이 있는 것 같음..
사실 이전버전까지는 사용을 안해봐서,..그냥 GraphQL을 위한 아폴로서 서버가 있다 정도로만? v4 버전에서는 좀 달라진것이 있어서 몇일 고생했음..
아참, 챗GPT v3.5에게 질문해봐도 뭐가 뭔지 ...이전 버전을 기준으로 설명을 하는건지..그냥 이상없다고 함..ㅡㅡ;; 이놈의 자슥을...
※ 순간 GPT 4o 지름 유혹이 있었지만,..슬기롭게 (=제미나이 활용) 이겨냈음 ㅎ
그러니까,..이런 상황인데..(나만 겪은건가?)
const server = new ApolloServer({
typeDefs,
resolvers,
context: ({req}) => {
return {models}
}
아니~ Express에 미들웨어로 등록할때 이전 버전은 .applyMiddleWare() 가 있었던것 같은데..v4 에서는 그런건 없고, expressMiddleWare 모듈이 있더라고? 그래서 그걸로 미들웨어로 등록한 상태에서 자꾸 옛날 문법을 알려주는 GPT v3.5 때문에 더 헷갈림 ㅡㅡ;;
https://www.apollographql.com/docs/apollo-server/data/context/
Context and contextValue
Sharing information and request details throughout your server
www.apollographql.com
하다가 막혀서 다시 공식문서를 참조,...(아폴로 팀이 관리하는)
보통은 startStandaloneServer 를 사용하거나 express에 미들웨어로 등록하는 걸로 사용하는 거 같은데,..예제는 온통 standalone 버전이고,..
그러니까 이부분,..나는 expressMiddleWare 로 사용하니까, context를 이쪽에서 정의를 해야 되더라궁...
이거 다들 아는거야? ㅠ