💨

tRPCのExpress adapterでmutationのRequest Bodyを受け取る

2023/02/10に公開

tRPCの公式ドキュメントに沿ってExpress adapterでtRPCを構築したが、AWS LambdaにデプロイするとRequest Body受け取ることができなかった

Usage with Express | tRPC

原因

Expressを使う場合はデフォルトでRequest Bodyはundifinedになる

By default, it is undefined, and is populated when you use body-parsing middleware such as express.json() or express.urlencoded().

Express 4.x - API リファレンス

解決策

trpcのmiddlewareを定義する前に、ボディパース用のmiddlewareを呼ぶ必要がある

const appRouter = t.router({
  // [...]
});
const app = express();

+ app.use(express.json()) // for parsing application/json
+ app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded

app.use(
  '/trpc',
  trpcExpress.createExpressMiddleware({
    router: appRouter,
    createContext,
  }),
);

Discussion