如何从异地 API 获取数据,从服务器到客户端?

How do I get fetched data from off-site API from server to Client?

提问人:Chris Gergler 提问时间:10/7/2023 更新时间:10/13/2023 访问量:34

问:

我正在做一个项目,该项目将天气事件数据映射到地球上供用户查看。

在一个文件中,我有我的 fetch 函数抓取数据,并在服务器端运行。 我们将此文件称为 data.tsx

export async function Build_And_Fetch()
{
    var url = BuildUrl();
    console.log("DEBUG FETCH");
    const response = await fetch(url);
    
    return response.json();
}

现在,我们有了 mapbox 文件,我们将它命名为 mapbox.tsx 它运行客户端,因此在尝试导入 data.tsx 时会引发 CORS 错误。

"use client"
import * as React from "react";
import mapboxgl, { Map } from "mapbox-gl";
import "mapbox-gl/dist/mapbox-gl.css";



const MapboxMap = ({jsondata: Object={}}) =>
{
    const [map, setMap] = React.useState<mapboxgl.Map>();

    const mapNode = React.useRef(null);
    mapboxgl.accessToken = "pk.eyJ1IjoiY2djdHNjaWVuY2VjZW50ZXIiLCJhIjoiY2xpM2dld3AzMGJkbTNlcGZ2aHowajZncCJ9.vFc7nroP3Pa0Cg7KAxvZjw"
    React.useEffect(()=>{
        const node = mapNode.current;

        if(typeof window === "undefined" || node === null) return;

        const mapboxMap = new mapboxgl.Map({
            container: node,
            style: "mapbox://styles/mapbox/light-v11",
            center: [-72,41],
            zoom:0.6
        });
        setMap(mapboxMap);
        
        
        mapboxMap.on('load',()=>{



            mapboxMap.addSource("test-data",{
            "type":"geojson",
            "data":{
                "type":"Feature",
                "geometry":{
                    "type":"Point",
                    "coordinates":[-71,42]
                },
                "properties" : {}
            }
        })}
        );

        // END
        return ()=>{mapboxMap.remove()};
    },[]);
    

    


    return <div ref={mapNode} style={{width:"100%",height:"100%"}}/>;
}
export default MapboxMap

有没有办法允许mapbox.tsx调用一个从data.tsx中获取承诺的函数?有没有其他方法可以处理将信息从服务器传递到客户端的问题?

reactjs typescript 异步 mapbox-gl-js next.js13

评论

0赞 Mike 'Pomax' Kamermans 10/7/2023
请记住使用 JS 约定。、不是、、不是等。在 JS 中,只有类使用 UpperCamelCase,变量/函数使用 lowerCamelCase。也就是说:CORS错误是什么?(如果您遇到错误,请在帖子中显示这些错误)当然,该 URL 是否甚至允许未经身份验证的第三方调用(而不是仅在其自己的域上工作,或者为具有 API 令牌/身份验证标头/等的第三方工作)。buildAndFetchBuild_And_FetchbuildURLBuildUrl
0赞 Chris Gergler 10/7/2023
对于更多细节,我使用 RSOE-EDIS 作为我的数据源。我将抓住抛出的错误,但即使如此,我仍然有其他服务器端用途来获取服务器而不是客户端上的数据。即处理备份以消除网络停机时间。该站点将进入本地托管的现场信息亭,因此无论与互联网的连接如何,它始终需要填充一些东西。
1赞 Mike 'Pomax' Kamermans 10/7/2023
请记住将这些额外的详细信息放在您的帖子中,而不是在评论中。每个人都应该在阅读您的帖子后获得所有信息,而无需通过评论线程。
0赞 Chris Gergler 10/7/2023
理解!我没有包括它们,因为我无论如何都需要从服务器请求数据,所以无论错误如何,要求都没有改变。当我到了抓住它的时候,我会更新问题以显示错误~!

答:

0赞 Chris Gergler 10/13/2023 #1

虽然我还没有让脚本在我这边工作,但我确实找到了合适的答案。

API 路由将是解决方案。据我所知,我应该使用来自mapbox地图的内部API请求向我的数据api发送请求。然后,Data API 将获取我的 json 数据并将其交还给 mapbox。

https://nextjs.org/docs/pages/building-your-application/routing/api-routes

我仍然是该框架的新手,但它似乎是避免尝试从客户端发出请求的 CORS 冲突的解决方案,并且是 Vercel 推荐的。