【发布时间】:2021-06-13 23:00:16
【问题描述】:
大家好,我已经编码一年多了,几乎完全专注于前端(js、BUNCHA 框架、CSS、html 等)
直到昨天,我才遇到了 Spotify API 的臭名昭著的 CORS 问题。
虽然我已经完成了一门 udemy 课程,该课程教会了我大量的 node.js/express,但直到前几天我真的不明白如何将它们与前端(反应)结合起来。我开始练习 在去 spotify 之前从 pokemon API 获取数据只是因为它更容易做(大声笑)......但我也知道我可以使用 express 为 spotify 应用程序启用 cors 等。除此之外,我的问题本质上是关于使用简单的 .json() 方法将数据解析为 json。
如何在我的后端(我获取结果的地方)我必须使用 data.json(),然后我必须再次完成这一切?为什么我还必须在两个迭代中重新实现异步/等待的东西,而这一切都应该在初始 fetchdata 函数中完成?
这是我的 fetchData.js 文件 ---- 我最初调用 API 的地方
import fetch from "node-fetch"
const fetchData=async()=>{
const data=await fetch('https://pokeapi.co/api/v2/ability')
const res=await data.json()
const final=res.results
return res.results
}
export default fetchData
这是我的 server.js 文件,当我的客户端从路径“/api/data”请求某些内容时,我调用该函数并发送数据
import express from 'express';
const app=express()
import axios from 'axios'
import cors from 'cors'
import fetchData from './fetchData.js'
app.use(cors())
app.get('/api/data', async (req, res)=>{
const data=await fetchData()
res.send(data)
})
app.listen(3000, ()=>{
console.log('listening on port 3000')
})
最后这是我的反应组件,它使用检索()函数调用该路径......当数据似乎已经被解析时,我为什么必须继续重复异步等待逻辑和 .json()调用准备好进入 fetchData() 函数了吗?
import React, {useState, useEffect} from 'react'
const Customers = () => {
const [pokemon, setPokemon]=useState([])
useEffect(()=>{
const retrieval=async()=>{
const data=await fetch('api/data')
const res=await data.json()
setPokemon(res)
}
retrieval()
console.log(pokemon)
},[])
return (
<div>
<ul>{pokemon.map(poke=>(
<li>{poke.name}</li>
))}</ul>
</div>
)
}
我想如果有人可以用外行的话来引导我完成整个过程。我在前端、ui 和 react 等方面相当不错。但是连接后端对我来说是全新的,而且 json.stringify()、json.parse() 和 .json() 的东西总是让我感到困惑......我通常只是猜测直到它起作用哈哈。提前谢谢...
【问题讨论】:
标签: node.js json reactjs api express