如何从 Express API 获取数据并将其显示到 React 应用程序?

Posted

技术标签:

【中文标题】如何从 Express API 获取数据并将其显示到 React 应用程序?【英文标题】:How to fetch and display data from Express API to a React app? 【发布时间】:2020-06-11 00:14:23 【问题描述】:

我最近开始学习 React,我正在尝试创建一个应用程序,该应用程序使用我使用 Express 创建的 API。

目前我在 http://localhost:3000/api 本地托管我的 Express API

但是,当我打开邮递员或浏览器并向http://localhost:3000/api/tasks 发送 GET 请求时,我得到了我的 API 上的所有任务,正如预期的那样。

我的反应应用看起来像这样

class App extends React.Component
  constructor()
    super()
    this.state = 
      tasks: 
    
  
...
  componentDidMount() 
     this.setState(loading: true)
     fetch("http://localhost:3000/api/tasks/1")
       .then(response => response.json())
       .then(data => 
         this.setState(
           tasks: data
         )
       )
   
...
  render() 
    return(
      <div>
        <p>this.state.tasks.id</p>
      </div>
  

当我在浏览器中打开开发选项卡时,我可以看到请求(代码:304)已发送,并且响应是包含我需要的对象的 json 文件。不过,我无法显示从 API 获取的数据。

【问题讨论】:

您检查是否有任何控制台错误? 你能告诉我们json响应应该是什么样子吗?我冒险猜测并说tasks 是一个数组(因此tasks.id 将是undefined),如果是这种情况,你会想要this.state.tasks.map(task =&gt; &lt;p&gt;task.id&lt;/p&gt;) 请出示您对请求的回复。 同时运行 API 和 react 应用程序时没有控制台错误 【参考方案1】:

问题是没有启用 CORS!添加后:

app.use(function(req, res, next) 
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    next();
);

到我的 Express API 的 index.js 文件中,我能够从 API 获取数据并将其显示到反应应用程序。

【讨论】:

【参考方案2】:

有一个 node.js 包用于提供 Connect/Express 中间件,可用于通过各种选项启用 CORS。

(npm cors)

【讨论】:

【参考方案3】:

我可以给你我的示例代码,因为如果不调试就很难从你的代码中看到错误。

我正在使用Nextjs,这是我使用fetch 方法从服务器端获取数据的方法。

const SamplePage = props => 
    // you can get data from api here from props.data

    const [ testState, setTestState] = useState(
        test: props.data,
    );


    return (
        ...
    )


SamplePage.getInitialProps = async ctx => 
    try 
        const  token, username  = nextCookie(ctx);
        const apiUrl = getHost(ctx.req) + `/api/portfolio/$ctx.query.id`;
        const response = await fetch(apiUrl, 
            method: 'GET',
            headers: 
                Authorization: JSON.stringify( token, username )
            
        );

        if (response.ok) 
            const data = await response.json();
            return  data ;
         else 
            // add your action when response is not ok
        
     catch (error) 
        // add your action when have error
    
;

export default withAuthSync(SamplePage);

【讨论】:

以上是关于如何从 Express API 获取数据并将其显示到 React 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何从标头中正确获取 jwt 令牌并将其与 express 一起使用

如何从API {}获取空回复

Laravel,从api获取数据并将其保存在数据库中[关闭]

如何从 Web Api 获取请求和响应并将其保存到数据库

如何从数据库中获取最后插入的 id 并将其发送到组件?

如何从 api 获取 json 数据并将其以嵌入形式发送到 discord.py 中?