动态拼接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
相关产品推荐
相关产品推荐

