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

动态拼接URL调用Strapi无数据返回,静态URL正常问题排查

动态拼接URL调用Strapi返回空数据,静态URL却正常的问题

我正在使用Express和Axios开发Node.js后端,从Strapi CMS获取数据后向客户端返回服务端渲染的HTML文档。遇到异常情况:动态拼接URL调用Strapi时,返回的data.data.length为0,不符合预期;但将相同URL静态写死调用时,data.data.length为1,与Postman请求结果一致。我无法发现两者URL的差异,最初怀疑是Axios的Bug,改用Node的http模块测试后,发现问题可能出在Express的request对象上。

动态拼接URL的代码(返回空数据)

app.get(`/blog/:URL_Identifier`, async (req, res) => {
  
  let data;
  let params =  req.params;
  console.log(params.URL_Identifier);

  let string = hostname + ":" + strapiport + `/api/blogposts?filters[URL_Identifier][$in][0]=${params.URL_Identifier}&populate=*`;

// string打印为https://127.0.0.1:1337/api/blogposts?filters[URL_Identifier][$in][0]=Blogpost1&populate=*

  data = await axios.get(string, {
    headers: {
      'Authorization': 'Bearer ' + token 
    }
  });
  // data = JSON.parse(data.data);
  console.log(data);
  res.render('pages/post', {
    data: data
  })
})

静态写死URL的代码(返回预期数据)

data = await axios.get("https://127.0.0.1:1337/api/blogposts?filters[URL_Identifier][$in][0]=Blogpost1&populate=*", {
    headers: {
      'Authorization': 'Bearer ' + token 
    }
  });

改用http模块的测试代码

app.get(`/blog/:URL_Identifier`, async (req, res) => {
  let data;
  let doesWork = "http://127.0.0.1:1337/api/blogposts?filters[URL_Identifier][$in][0]=Blogpost1&populate=*";
  let doesNotWork = `http://127.0.0.1:1337/api/blogposts?filters[URL_Identifier][$in][0]=${req.params}&populate=*`;
  var options = {
    headers: {
      'Authorization': 'Bearer ' + token 
    }
  };
  
  callback = function(response) {
    var str = ''
    response.on('data', function (chunk) {
      str += chunk;
    });
  
    response.on('end', function () {
      console.log(str);
      data = JSON.parse(str);
      console.log(data);
    });
  }
  
  var req1 = await http.request(doesNotWork, options, callback);
  req1.end();
})

测试结果

  • 使用doesNotWork的请求返回:
{
  data: [],
  meta: { pagination: { page: 1, pageSize: 25, pageCount: 0, total: 0 } }
}
  • 使用doesWork的请求返回:
{
  data: [ { id: 1, attributes: [Object] } ],
  meta: { pagination: { page: 1, pageSize: 25, pageCount: 1, total: 1 } }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:25:20