Как мне разобраться с обоими запросами и исправить эту ошибку? - PullRequest
0 голосов
/ 12 апреля 2020

Я сталкиваюсь с некоторыми трудностями и пытаюсь выяснить, что не так с моим кодом, но у меня не получается.

То, чего я пытаюсь достичь, - это уметь использовать один или два запроса в node.js. К сожалению, я не могу использовать оба. Когда я использую жанр, он не сортируется, но сортировка, кажется, работает в одиночку. Использование жанра также, кажется, вызывает асинхронную проблему c? Я посмотрел на некоторые другие вопросы, но они не были похожи на мои, так как я использую только 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!');
});

По какой-то причине, если я использую оба, я получаю асин c Я верю в проблему?

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',
},

Спасибо, что уделили время!

1 Ответ

0 голосов
/ 12 апреля 2020

Это не асинхронная c проблема.

При обработке genres вы отправляете ошибку 400 или полезную нагрузку.

При обработке sort вы отправляете Ошибка 400 или полезная нагрузка.

Вы должны отправить ровно одну полезную нагрузку - сначала отфильтруйте жанры (если требуется), затем отсортируйте (если требуется), затем отправьте полезную нагрузку.

Ошибка, которую вы вы видите, потому что вы отправили полезную нагрузку для genres, а затем вы получили sort, но есть какая-то ошибка, поэтому вы пытаетесь отправить 400, но не можете, потому что вы уже зафиксировали Заголовки, отправив полезную нагрузку в жанре logi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...