【发布时间】:2019-08-10 10:43:03
【问题描述】:
我目前正在开发一个应用程序,它使用 Node.js REST 后端和客户端的 React.js。
我在尝试向我的 API 发出多个 fetch 请求时遇到问题,导致请求停止,这可能需要 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 中尝试过此操作,但三个都出现了问题。
任何帮助将不胜感激。谢谢!
-
更新:
这是我的后端的设置方式
// 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;
【问题讨论】:
-
这是一个设计/架构问题(很可能在后端......)不是一个简单的答案......如果你有 github 上的代码,请在此处上传链接,我会尽力提供帮助你……
-
嘿,我已经用我的后端代码的样子编辑了我的问题。
标签: javascript node.js reactjs api fetch