我在使用 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/