You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase Node.js环境下仅返回1行数据问题求助

Supabase查询复用导致路由返回异常问题分析

问题根源

你把restaurants = supabase.from('restaurants')这个查询构建对象全局复用了,Supabase的查询构建器是带状态的链式调用对象——当你在/:id路由里执行.eq('id', id)时,这个全局的restaurants对象的查询条件被永久修改了。后续再访问根路由调用select(),实际上是在之前的eq条件基础上执行查询,自然只会返回符合该id的那一条数据,并非缓存问题。

修复方案

不要全局缓存supabase.from('restaurants')的结果,每个请求都重新创建查询对象,确保每次查询都是独立无干扰的。

修改后的代码:

const express = require('express')
const router = express.Router()
const supabase = require('../provider/supabase')

router.get('/', async (req, res) => {
  // 每次请求重新生成查询对象
  const { data } = await supabase.from('restaurants').select()
  res.json(data)
})

router.get('/:id', async (req, res) => {
  const { id } = req.params
  // 同样每次请求重新生成
  const { data } = await supabase.from('restaurants').select().eq('id', id)

  if (!data || data.length === 0) {
    return res.sendStatus(404)
  }
  res.json(data[0])
})

补充说明

Supabase的查询构建器设计是链式调用且会修改原对象状态,所以不能将from()的结果全局保存复用。每个请求独立创建查询对象,就能避免不同路由的查询条件互相污染的问题。

内容的提问来源于stack exchange,提问作者wysiwyg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:50:02