gpt4 book ai didi

javascript - 从 React.js 向 Node.js API 发出多个请求

转载 作者:行者123 更新时间:2023-12-02 23:59:16 27 4
gpt4 key购买 nike

我目前正在开发一个应用程序,该应用程序使用 Node.js REST 后端和客户端的 React.js。

我在尝试向 API 发出多个提取请求时遇到问题,导致请求停滞,这可能需要长达 2 分钟或更长时间才能返回数据......我发出单个请求没有问题到 React 或 Postman 的后端。

我的后端“/movies/{category}”中有一个端点,它根据所选类别返回电影列表。例如

/movies/horror
/movies/thriller
/movies/comedy

在我的 React 应用程序中,组件结构如下:

APP
-- DASHBOARD
-- -- MOVIELIST (horror)
-- -- MOVIELIST (thriller)
-- -- MOVIELIST (comedy)

在每个 MOVIELIST 组件中,我都会提取/movies/{category} 以获取数据。

如果我只加载单个 MOVIELIST 组件,则没有任何问题。但一旦我尝试加载多个,请求就会开始停滞。

我已在 Chrome、FireFox 和 IE 中尝试过此操作,并且该问题在所有三者上均发生。

以下是 Chrome 中请求停滞的示例: enter image description here

如有任何帮助,我们将不胜感激。谢谢!

-

更新:

这是我的后端的设置方式

// index.js
const express = require('express');
const router = express.Router();

const app = express();

const movies = require('./routes/movies');

app.use(express.json());
app.use('/api/movies', movies);

const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Listening on port ${port}...`));

然后是我的电影端点

//movies.js
const express = require('express');
const router = express.Router();
const moment = require('moment');
const sql = require('mssql');
const _ = require('lodash');

const config = require('../config/config');

//For CORS
router.options('/*', (req, res) => {
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT");
res.header('Access-Control-Allow-Headers', ['Content-Type', 'x-access-token']).send();
});

router.get('/horror', auth, (req, res) => {
sql.connect(config).then(pool => {
return pool.request().query(
`SELECT STATEMENT`
);
}).then(result => {
sql.close();
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT");
res.header('Access-Control-Allow-Headers', ['Content-Type', 'x-access-token']);
return res.send(result);
}).catch(err => {
sql.close();
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT");
res.header('Access-Control-Allow-Headers', ['Content-Type', 'x-access-token']);
return res.send(err);
});
})

router.get('/thriller', auth, (req, res) => {
sql.connect(config).then(pool => {
return pool.request().query(
`SELECT STATEMENT`
);
}).then(result => {
sql.close();
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT");
res.header('Access-Control-Allow-Headers', ['Content-Type', 'x-access-token']);
return res.send(result);
}).catch(err => {
sql.close();
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT");
res.header('Access-Control-Allow-Headers', ['Content-Type', 'x-access-token']);
return res.send(err);
});
})

router.get('/comedy', auth, (req, res) => {
sql.connect(config).then(pool => {
return pool.request().query(
`SELECT STATEMENT`
);
}).then(result => {
sql.close();
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT");
res.header('Access-Control-Allow-Headers', ['Content-Type', 'x-access-token']);
return res.send(result);
}).catch(err => {
sql.close();
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', "GET, POST, PUT");
res.header('Access-Control-Allow-Headers', ['Content-Type', 'x-access-token']);
return res.send(err);
});
})

module.exports = router;

最佳答案

我是开发新手,所以你可能不太重视我说的话。

我认为您在获取数据时做得有点太多了。您可以在仪表板中获取所有电影,但请确保所有电影都有类别,然后使用单个端点根据以类别名称作为查询传递的类别来获取电影。

在仪表板中,有一个 getAllMovies 端点 -/movies/getAllMovies - 用于在 Home/Dashboard 组件渲染时获取所有电影。

侧边栏/导航中的每个类别都有三个链接/按钮。创建一个端点 - /movies/categories/${category_name},对于您感兴趣的每个类别,将类别名称作为查询传递到端点并获取。

就像 @SakoBu 所说的,将其放在 github 上并分享链接。

编辑:您可以使用 cors 的 npm 包,它将节省您大量的击键并使您的代码更具可读性。

https://github.com/expressjs/cors

关于javascript - 从 React.js 向 Node.js API 发出多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55248897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com