如何进行服务器端提取调用?
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;
})
});
两件事:
您的 /request-weather
处理程序向 thisotherwebsite
发出请求,但不对响应执行任何操作。
您的 .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);
参考:
fetch: response.json() - 从 fetch 响应中提取数据
express response.json() - 发送 json 到响应(通常是浏览器)
我有一个 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;
})
});
两件事:
您的
/request-weather
处理程序向thisotherwebsite
发出请求,但不对响应执行任何操作。您的
.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);
参考:
fetch: response.json() - 从 fetch 响应中提取数据
express response.json() - 发送 json 到响应(通常是浏览器)