我遇到了一些麻烦,我试图找出我的代码出了什么问题,但我很快就提出了。
我试图实现的是能够在node.js中使用一个或两个查询。不幸的是,我无法同时使用两者。当我使用流派时,它不会排序,但是排序似乎确实可以单独工作。使用流派似乎还会引起异步问题?我查看了其他一些问题,但它们似乎与我的问题并不相似,因为我仅使用get和send。
const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const playstore = require('./playstore.js');
const app = express();
app.use(morgan('common'));
app.use(cors());
app.get('/apps', (req, res) => {
const { genres, sort } = req.query;
let playstoreG = null;
const GENRELIST = [
'Action',
'Puzzle',
'Strategy',
'Casual',
'Arcade',
'Card',
];
if (sort) {
if (!['Rating', 'App'].includes(sort)) {
res.status(400);
res.send('Sort selection must be app or rating.');
} else {
playstore.sort((a, b) =>
a[sort] < b[sort] ? -1 : a[sort] > b[sort] ? 1 : 0
);
}
}
if (genres) {
if (!GENRELIST.includes(genres)) {
res.status(400);
res.send('Apps in this genre not found.');
} else {
playstoreG = playstore.filter(
(q) => q.Genres.toLowerCase() === genres.toLowerCase()
);
}
}
let results = '';
if (playstoreG === 0 || playstoreG === null) {
results = playstore;
} else {
results = playstoreG;
}
res.json(results);
});
app.listen(5000, () => {
console.log('Server is live on PORT 5000!');
});
出于任何原因,如果我同时使用这两个,我会收到一个异步问题,我相信吗?
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:526:11)
at ServerResponse.header (C:\Users\*\vsc\gpsServer\node_modules\express\lib\response.js:771:10)
at ServerResponse.send (C:\Users\*\vsc\gpsServer\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\Users\*\vsc\gpsServer\node_modules\express\lib\response.js:267:15)
at ServerResponse.send (C:\Users\*\vsc\gpsServer\node_modules\express\lib\response.js:158:21)
at C:\Users\*\vsc\gpsServer\app.js:38:28
at Layer.handle [as handle_request] (C:\Users\*\vsc\gpsServer\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\*\vsc\gpsServer\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\*\vsc\gpsServer\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\*\vsc\gpsServer\node_modules\expres
我正在使用的一些数据。
module.exports = [
{
'App': 'ROBLOX',
'Category': 'GAME',
'Rating': 4.5,
'Reviews': '4447388',
'Size': '67M',
'Installs': '100,000,000+',
'Type': 'Free',
'Price': '0',
'Content Rating': 'Everyone 10+',
'Genres': 'Adventure;Action & Adventure',
'Last Updated': 'July 31, 2018',
'Current Ver': '2.347.225742',
'Android Ver': '4.1 and up',
},
{
'App': 'Subway Surfers',
'Category': 'GAME',
'Rating': 4.5,
'Reviews': '27722264',
'Size': '76M',
'Installs': '1,000,000,000+',
'Type': 'Free',
'Price': '0',
'Content Rating': 'Everyone 10+',
'Genres': 'Arcade',
'Last Updated': 'July 12, 2018',
'Current Ver': '1.90.0',
'Android Ver': '4.1 and up',
},
谢谢您的时间!
这不是异步问题。
在处理genres
时,您正在发送400错误或有效负载。
在处理sort
时,您正在发送400错误或有效负载。
您应该只发送一个有效载荷-首先过滤类型(如果需要),然后进行排序(如果请求),然后发送有效载荷。
您看到的错误是因为您已经发送了genres
的有效负载,然后又到达了sort
,但是存在某种错误,因此您尝试发送400,但是不能因为您已经通过在类型逻辑中发送有效内容来提交了标头。