错误:将标头发送到客户端后无法设置标头

时间:2019-09-11 09:36:03

标签: node.js express

我写了一个简单的快递应用程序,用户可以搜索游戏的名称,并根据游戏的类型进行过滤,并按标题或排名进行排序。游戏数据是具有App,Rate和Genre等键的对象数组 但是,我收到控制台错误“发送到客户端后无法设置标题”。

请求仍然返回正确的过滤结果。

这是什么意思?

const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const googleApps = require('./google-apps')

const app = express();
app.use(morgan('common'));
app.use(cors());

app.get('/apps', (req, res) => {

  let {
    search = '', sort, genres
  } = req.query;
  if (sort) {

    if (!['rating', 'app'].includes(sort)) {
      return res.status('400')
        .send('Sort must be one of "app" or "rating"')
    }

  }
  if (genres) {
    if (!['Action', 'Puzzle', 'Strategy', 'Casual', 'Arcade', 'Card'].includes(genres)) {
      return res.status('400')
        .send('Genres must be one of Action, Puzzle, Strategy, Casual, Arcade, Card')
    }

  }

  let results = googleApps.filter(app =>
    app.App
    .toLowerCase()
    .includes(search.toLowerCase())
  )
  if (sort) {

    if (sort === 'rating') {
      sort = 'Rating'
    } else {
      sort = 'App'
    }
    results
      .sort((a, b) => {
        return a[sort] > b[sort] ? 1 : a[sort] < b[sort] ? -1 : 0;
      });
  }
  if (genres) {
    let genreResult = results.filter(app =>
      app
      .Genres
      .toLowerCase()
      .includes(genres.toLowerCase())
    )
    res.json(genreResult)
    console.log(genreResult)


  }
  res.json(results)

})

module.exports = app;

1 个答案:

答案 0 :(得分:1)

例如,当您尝试向客户端发送不止一个响应,一个请求,一个响应的多个响应时,就会发生这种情况

res.send({ data: "I want to send this message" });
res.send({ data: "But I also want to send this message" });

这永远不会起作用,因为您正尝试为同一请求发送多个响应。

这种情况发生在您的代码中,正如@ ayush-gupta所说,您尝试发送res.json(genreResult),您应该返回到达发送响应的位置。

相关问题