JavaScript - Node.js 错误 : Can't set headers after they are sent

标签 javascript node.js reactjs express

我在使用 Node.js 时遇到一些问题。

我正在尝试使用 newsapi.org api 来获取头条新闻。 当我点击'http://localhost:8082/news/api/tech-crunch时',它到达“tech-crunch”switch 语句中的“/news/api/:newsName”部分。

它确实会在第一次渲染新闻,但一旦加载,我就会收到此“错误:发送后无法设置 header ”。

您能帮我解决这个问题吗?

下面是我的 server.js 代码:

var request = require('request');
var express = require('express');
var app = express();
var cors = require('cors');

let __homeglobals = [];

app.use(cors({credentials:true, origin: 'http://localhost:8080'}));
app.set("jsonp callback", true);

//fetch news by category
app.get('/news/api/:newsName', function(req, res) {
  const API_KEY = '6c78608600354f199f3f13ddb0d1e71a';

  let data = '';

  const techCrunchURL = `https://newsapi.org/v2/top-headlines?sources=techcrunch&apiKey=${API_KEY}`

  const businessInsiderURL = `https://newsapi.org/v2/top-headlines?sources=business-insider&apiKey=${API_KEY}`

  let fetchedTechCrunchNews = {
    totalResults: '',
    articles: ''
  };

  switch(req.params.newsName) {
    case 'tech-crunch':
      request(techCrunchURL, function(err, response, html) {        
        
        let formattedData = JSON.parse(response.body);

        data = response.body;
    
        res.setHeader('Content-Type', 'application/json');
        res.send(data);
        
      });

    case 'business insider':
      request(businessInsiderURL, function(err, response, html) {
        let formattedData = JSON.parse(response.body);

        data = response.body;

        res.setHeader('Content-Type', 'application/json');
        res.send(data);
        
      });

    default:
      data = 'Please type in correct news source';
      break;
  }
})

var server = app.listen(8082, function () {
   var host = server.address().address;
   var port = server.address().port;
   
   console.log("Example app listening at http://%s:%s", host, port);
});

最佳答案

您忘记在每个case之后添加break

switch(req.params.newsName) {
case 'tech-crunch':
  request(techCrunchURL, function(err, response, html) {        

    let formattedData = JSON.parse(response.body);

    data = response.body;

    res.setHeader('Content-Type', 'application/json');
    res.send(data);

  });
  break;

case 'business insider':
  request(businessInsiderURL, function(err, response, html) {
    let formattedData = JSON.parse(response.body);

    data = response.body;

    res.setHeader('Content-Type', 'application/json');
    res.send(data);

  });
  break;

default:
  data = 'Please type in correct news source';
  break;
}

关于JavaScript - Node.js 错误 : Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50403547/

相关文章:

javascript - 检查 redux 状态是否改变的简单方法

处理可折叠 div 和子 div 的 Javascript

javascript - 将 json 对象从 php 传递到 javascript

javascript - 取消单独和所有 axios 请求

javascript - TypeError : func. apply 不是函数

javascript - MongoDB - 如何仅在存在的字段上使用 $ifNull

javascript - 如何在 react 应用程序中重新加载页面(状态)

node.js - connect-busboy 捕获无文件场景

javascript - 如何在函数之外访问 promise 回调值?

css - react native : How can i hidden area outside modal