reactjs 无法在next js中使用fetch获取记录

00jrzges  于 2023-10-17  发布在  React
关注(0)|答案(1)|浏览(104)

我已经creted博客API使用以下代码:

const fs = require('fs');  

export default async function handler(req, res) 
{
  let blogs = [];
  try 
  {
    let files=  fs.readdirSync('blogdata');
    files.forEach((file)=>{
      let content =  fs.readFileSync('blogdata/'+file,'utf-8');
      blogs.push(JSON.parse(content));
    });
    res.status(200).json({blogs})
  }
  catch(err)
  {
    console.log(err);
  }
}

当我试图用下面的代码获取数据时:

import React, { useEffect, useState } from 'react'

export default function  Blogs()  
{
  const [blogs, setBlogs] = useState([])
  useEffect(()=>{
    console.log('* useEffect *');
    
    fetch('http://localhost:3000/api/blogs')
    .then((res)=>res.json())
    .then((json)=>{ 
      console.log('json ',json);
      setBlogs(json);      
    })

  },[]);

  return (
    <>
    <div>blogs</div>
    
    {blogs.length > 0 ? (
      blogs.map((blog, index) => 
      {
        <p>blog.title</p>
      })
    ): 
    (
      <p>Loading...</p>
    )}
    </>
  )
}

那么它总是显示加载。为了调试,我使用了console log和console.log('json',json);正在显示数据,但未显示在返回部分中。提前感谢!
即使我尝试从API传递静态内容,仍然显示相同。

n6lpvg4x

n6lpvg4x1#

从API路由发送的响应不是数组,而是包含数组的对象。

// change this
res.status(200).json({blogs})

// to this
res.status(200).json(blogs)

相关问题