如何进行服务器端提取调用?

How do I make server-side fetch calls?

我有一个 React 网络应用程序,它目前在客户端获取调用以使用实时信息更新仪表板(例如,当前天气),这意味着随着用户的增加,它会导致不必要的流量调用并可能使该天气网站崩溃。

我想了解的是如何使这些获取调用在服务器端进行?我研究过创建一个 Node.js Express 服务器,但我不确定它是否具有对远程主机进行提取调用的功能。

不幸的是,这是我的带有请求天气的代码,它实际上不起作用。

const { response } = require('express');
const express = require('express'); 
const app = express(); 
var fetch = require('node-fetch');
const port = process.env.PORT || 5000; 

app.use(express.json());

// This displays message that the server running and listening to specified port
app.listen(port, () => console.log(`Listening on port ${port}`)); 

// create a GET route
app.get('/request-info', (req, res) => { 

  res.send({ information: 'information call successful' });

});

app.get('/request-weather', (req, res) => {
    fetch('http://thisotherwebsite.com/weather-query-that-returns-json',
        {method: 'GET',
        headers: {' Accept': 'application/json'}})
        .then(res => {
            return res;
        })
    });

两件事:

  1. 您的 /request-weather 处理程序向 thisotherwebsite 发出请求,但不对响应执行任何操作。

  2. 您的 .then(res => { return res; }) 实际上没有做任何事情。您只是获取已经 returns 的内容并返回它。

如果您想将响应发送回浏览器,您可以这样做:

fetch(...) // make the request
  .then(result => result.json()) // extract the data
  .then(data => {
    res.json(data); // send it to the browser
  })

如果你想做额外的处理,你可以 await fetch 调用,然后用它做任何你需要做的事情:

app.get('/request-weather', async (req, res) => { // make handler async

  // get data from the other site
  const data = await fetch(...)
    .then(response => response.json());
  
  // package it up with some other stuff
  responseData = {
    fromOtherSite: data,
    myExpressStuff: {
      foo: 1,
      bar: 2,
    }
  }

  // return it to the browser
  res.json(responseData);

参考: