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

无法从Strapi获取数据(NextJS/Strapi/Axios)

问题排查与解决

核心问题1:Next.js App Router不兼容getServerSideProps

你的页面文件在app/products/page.js,属于Next.js 13+的App Router体系,而getServerSideProps是Pages Router的专属方法,在App Router中不会被执行——这就是你看不到console.log("Hello")输出、也不会触发数据请求的根本原因。

核心问题2:fetchQuery函数存在语法错误

代码里的if语句缺少闭合大括号,导致函数无法正常解析执行,即使逻辑走到这里也会直接报错。

核心问题3:环境变量BASE_URL可能配置错误

如果你的BASE_URL没有包含/api后缀,拼接后的请求地址会是http://localhost:1337/products,而正确的Strapi接口地址是http://localhost:1337/api/products,这会导致请求404。


修正步骤

1. 修复fetchQuery函数的语法错误并添加错误处理

修改utils文件中的代码:

const baseUrl = process.env.BASE_URL;
async function fetchQuery(path, params = null) {
    console.log("In the query");
    let url;
    if (params !== null) {
        url = `${baseUrl}/${path}/${params}`;
    } else {
        url = `${baseUrl}/${path}`;
    }
    const response = await fetch(url);
    // 添加请求状态校验,避免静默失败
    if (!response.ok) {
        throw new Error(`请求失败,状态码:${response.status}`);
    }
    const data = await response.json();
    return data;
}
export { baseUrl, fetchQuery };

2. 改用App Router的异步组件写法获取数据

修改app/products/page.js:

import { fetchQuery } from "../utils";

export default async function Products() {
    const products = await fetchQuery("products");
    console.log("获取到的产品数据:", products); // 该日志会在Next.js的终端输出
    return (
        <div>
            <h1>Products</h1>
            {/* 渲染产品列表示例 */}
            <ul>
                {products.data?.map((product) => (
                    <li key={product.id}>{product.attributes.name}</li>
                ))}
            </ul>
        </div>
    );
}

3. 正确配置环境变量

在Next.js项目根目录创建.env.local文件,写入:

BASE_URL=http://localhost:1337/api

4. 确认Strapi的权限设置(可选)

虽然你直接访问接口能看到数据,但还是确认下:在Strapi后台进入Settings -> Roles & Permissions -> Public,找到Products权限,确保find权限已勾选并保存。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:55:25