😃

fastify-cookieでreq.cookieがnullになる

2024/12/14に公開

結論

fastify-cookieの登録がonRequestの後だった場合、fastifyのonRequest Hook内だとreq.cookiesnullになります。

app.addHook('onRequest', async (req, reply) => {
  console.log(req.cookies) // null
}
app.register(fastifyCookie) // fastify-cookieの登録
app.get('/hoge/', (req, reply) => {
  console.log(req.cookies) // { ~~ }
})

req.cookiesのinterfaceは以下のものであり、本来nullになるはずがなかったため結構ハマりました。
https://github.com/fastify/fastify-cookie/blob/4e816afbe59134c8dcb07b14045ad73b70d6bcc0/types/plugin.d.ts#L26

interface FastifyRequest extends SignerMethods {
  /**
   * Request cookies
   */
   cookies: { [cookieName: string]: string | undefined };
}

少しだけ中身を眺める

ここで最初にnullに初期化してるっぽい。
https://github.com/fastify/fastify-cookie/blob/38913b7ebea774a854b72d01d90d11c9864d1f02/plugin.js#L139

そのあと、onRequest後にには以下の部分でcookieをparseしてくれるっぽいのだが、
https://github.com/fastify/fastify-cookie/blob/38913b7ebea774a854b72d01d90d11c9864d1f02/plugin.js#L66
これが本家fastifyの後のonRequesthookの後に走るので、onRequestでは cookieがnullになるといった感じ。

おわり

半日溶けたので、app.registerはなる早で実行しておいた方がいいのかも。

Discussion