기본

elysia의 hook은 기본적으로 캡슐링 되어있다.

→ 즉 new Elysia로 생성한 인스턴스 내부에서만 값들을 받아올 수 있다.

as

scoped

hook의 실제 용도처럼 use로 플러그인 형태로 가져와서 쓰려면 스코프를 넓게 가져가야됨

export const getUserId = new Elysia()
  .use(userService)
  .guard({
    as: "scoped",
    isSignIn: true,
    cookie: "session",
  })
  .resolve({ as: "scoped" }, ({ store: { session }, cookie: { token } }) => ({
    username: session[token.value],
  }));

위 코드 처럼 getUserId라는 훅을 쓸 떄, username을 훅을 사용하는 쪽에서 가져오려면 as: “scoped” 를 넣어줘야됨

global

만약 훅 안에 훅을 쓰는 것 같이 여러겹으로 쌓여있는 상태에서 접근하려면 as: “global” 을 넣어줘야됨

plugin

export const getUserId = new Elysia()
  .use(userService)
  .guard({
    isSignIn: true,
    cookie: "session",
  })
  .resolve(({ store: { session }, cookie: { token } }) => ({
    username: session[token.value],
  }))
  .as("plugin");

as를 각각의 내부에 쓰기 힘들 떈 한번에 as(”plugin”)으로 변경할 수 있음