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

如何从RTK向Node(MySQL连接)传参实现数据过滤?

解决RTK Query传参后返回全表数据的问题

你的核心问题是后端没有正确接收并使用前端传递的过滤参数,导致无论传什么都返回全表数据。下面分两种常见方案给出完整的修正代码:

方案1:使用URL查询参数(匹配你当前前端的写法)

后端修正代码

你原来的后端代码完全没用到前端传的user_id参数,需要从req.query中获取并加入SQL过滤:

app.get("/test", (req, res) => {
  // 从查询参数中提取user_id
  const { user_id } = req.query;
  // 有参数则过滤,无参数返回全表(可选逻辑,根据需求调整)
  const query = user_id 
    ? 'SELECT * FROM portfolios WHERE user_id = ?' 
    : 'SELECT * FROM portfolios';
  // 参数化查询防止SQL注入,参数数组对应SQL中的?占位符
  db.query(query, user_id ? [parseInt(user_id)] : [], (err, data) => {
    if (err) return res.json(err);
    return res.json(data);
  });
});

注意:parseInt(user_id)是因为req.query中的值是字符串,若你的user_id是MySQL中的整数类型,需要转换类型避免匹配失败。

前端代码(无需修改)

你当前的RTK Query写法是正确的,params会自动拼接到URL成/test?user_id=6:

const testerApi = createApi({
    reducerPath: 'tester',
    baseQuery: fetchBaseQuery({
        baseUrl: "http://localhost:8800"
    }),
    endpoints(builder) {
        return {
            fetchTesting: builder.query({
                query: (name) => {
                    return {
                        url: '/test',
                        params: {
                            user_id: name.id 
                        },
                        method: 'GET',
                    };
                },
            }),
        };
    },
});

方案2:使用URL路径参数(你尝试过但代码不完整)

如果你想改成/test/6这种路径传参的形式,需要同时修改前后端:

后端修正代码

// 定义带路径参数的路由
app.get("/test/:user_id", (req, res) => {
  // 从路径参数中提取user_id
  const { user_id } = req.params;
  const query = 'SELECT * FROM portfolios WHERE user_id = ?';
  db.query(query, [parseInt(user_id)], (err, data) => {
    if (err) return res.json(err);
    return res.json(data);
  });
});

前端RTK Query修正代码

需要把参数拼接到URL路径中:

fetchTesting: builder.query({
    query: (name) => {
        return {
            url: `/test/${name.id}`, // 把user_id拼到路径里
            method: 'GET',
        };
    },
}),

关键排查步骤

  1. 先单独测试后端接口:用浏览器/Postman直接访问http://localhost:8800/test?user_id=6(或http://localhost:8800/test/6),确认返回的是过滤后的数据,排除后端逻辑问题。
  2. 检查参数类型:确保MySQL中user_id的类型和你传递的参数类型一致(比如都是整数),避免类型不匹配导致过滤失效。
  3. 避免SQL注入:永远不要用字符串拼接的方式写SQL(比如'SELECT * FROM portfolios WHERE user_id = ' + user_id),必须使用参数化查询。

内容的提问来源于stack exchange,提问作者Peter Double U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:13:35