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
相关产品推荐
相关产品推荐

