如何创建从 Supabase 数据库获取实时更新的 Next.js API 端点

How can I create a Next.js API endpoint that gets realtime updates from Supabase database

提问人:Henry 提问时间:4/27/2023 更新时间:4/27/2023 访问量:275

问:

我正在使用 Next.js 和 Plasmo 创建一个 Chrome 扩展程序,而 Plasmo 有一个奇怪的事情,我无法在客户端导入 Supabase,所以我在文件夹中创建自定义 api 路由来处理与 Supabase 有关的任何事情。我一直在尝试实现实时更新 - 预期的行为是请求在 API 更新之前不返回任何响应,然后当 API 更新时,我们得到任何有效负载,然后停止。page/api

import type { NextApiRequest, NextApiResponse } from "next";
import supabase from "scripts/config/supabaseClient";

export default async (req: NextApiRequest, res: NextApiResponse) => {
  const { message_id } = req.query;

  const channel = supabase.channel("my-channel");
  console.log("waiting for change");

  channel.on(
    "postgres_changes",
    {
      event: "UPDATE",
      schema: "public",
      table: "messages",
      filter: `id=eq.${message_id}`
    },
    (payload) => {
      console.log(payload);
      channel.unsubscribe()
      res.status(200).json(payload);
    }
  );
  console.log("subscription done");
};

但是,现在,发生的事情是我收到此错误:和console.log输出仍然显示,但中间的代码似乎没有运行。我已检查是否允许消息表广播实时更新。API resolved without sending a response for /api/supabase/subscriber?message_id=hey, this may result in stalled requests."waiting for change""subscription done"

next.js 服务器端 supabase

评论

0赞 dshukertjr 5/1/2023
你根本做不到。Next.js API 路由不支持 Web 套接字。vercel.com/docs/concepts/limits/overview#websockets

答: 暂无答案