😵💫
Docker上でNext.js から Ruby on Rails で定義したJSONを取りに行ったときのエラーを解決した
状況
- Docker で Next.js と Ruby on Rails (APIモード) をそれぞれ別のコンテナで立ち上げた
- Ruby on Rails 側のDBに入れたJSONデータを Next.js で getStaticProps() で取得しようとした
- JSONデータに異常はないのに
SyntaxError: Unexpected token < in JSON at position 0エラーが発生した
解決
-
{Railsのプロジェクトフォルダ}/config/environments/development.rbの do文 の中にconfig.hosts << "{Railsを立ち上げたコンテナ名}"を追記する
↓ Railsを立ち上げたコンテナの名前がrailsserverだった場合の例 ↓
Rails.application.configure do
(省略)
config.hosts << "railsserver"
end
- Next.js 側の getStaticProps() の中の fetch の引数で
http://localhost:3000と書いていた部分をhttp://{Railsを立ち上げたコンテナ名}:3000に変更する
↓ Railsのコンテナがrailsserver、Railsで定義したapi名がpostsだった場合の例 ↓
export async function getStaticProps() {
const res = await fetch("http://railsserver:3000/posts");
const posts = await res.json();
return{
props: {
posts,
},
};
}
- getStaticProps() の return の直前で console.log で確認したらJSONデータを引っ張ってこれてました。
Discussion