🍆

Node.jsからSupabaseにINSERTしたりSELECTしたい

2024/02/27に公開

スクレイピングなどをしていると、Node.jsでファイル実行して、その結果をSupabaseにINSERTしたり、データを呼び出したいこともあるかと思います。

それを実現するまでの流れを備忘録として残しておきます。

※この記事ではNode.jsでTypeScriptファイルをts-nodeで実行しています。

0.必要なものをインストールする

1.環境変数ファイルを設定する

ルートディレクトリに .env ファイルを作成し、下記のような形で環境変数を設定します。

.env
SUPABASE_URL=http://127.0.0.1:54321
SUPABASE_ANON_KEY=【ここにanon_key】

上記はご自身の環境に応じて変更してください。
SUPABASE_URL はご自身のSupabase APIのURLを指定。
SUPABASE_ANON_KEY はご自身のanon keyを指定。

2. 再利用可能なSupabaseのクライアントを作成する

src/hooks/useSupabase.ts など、任意の名前でファイルを作成します。
これを用意しておくと型定義ファイルや環境変数の指定など、何度も何度もする必要がなくなって便利です。

src/hooks/useSupabase.ts
// 環境変数を適用する
import "dotenv/config";
import { createClient } from "@supabase/supabase-js";
// Supabase CLIで生成したTypeScript型を呼び出す
import type { Database } from "src/types/supabase-schema";

export const useSupabase = () => {
  if (!process.env.SUPABASE_URL || !process.env.SUPABASE_ANON_KEY) {
    throw new Error("Supbase環境変数の設定に問題がある可能性が高いです。");
  }

  // 環境変数や型ファイルを適用したクライアントを作成
  const supabase = createClient<Database>(process.env.SUPABASE_URL, process.env.SUPABASE_ANON_KEY, {
    auth: {
      persistSession: false,
      autoRefreshToken: false,
    },
  });

  return { supabase };
};

3. Node.jsからSupabaseのデータを呼び出してみる

これで準備は整いましたので、実際にSupabaseからデータを呼び出してみましょう!

workers/index.ts
import { useSupabase } from "src/hooks/useSupabase";

(async () => {
  const { supabase } = useSupabase();

  const { data, error } = await supabase.from("addresses").select(`prefecture,city,town,chome`).eq("postalcode", "5440033");
  console.log(data, error);
})();

fromselect の値はご自身の環境に応じて変更してください。
上記の例では郵便番号を元に都道府県・市区町村・町域・丁目を呼び出しています。

無事に結果が返ってきました!
もしも error の方に何らかのデータが出てくるようであれば、記述やDBのRLS設定に問題があるかもしれません。(RLSはテスト的にSELECTの呼び出しをtrueにしておくと混乱しにくいでしょう。)

Discussion