javascript - 发送到客户端 Express 后无法设置标头
问题描述
我收到错误“在将标头发送到客户端后无法设置标头”。请帮助我。当我在邮递员上尝试同样的事情时,它工作正常。
const express = require("express");
const https = require("https");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
app.get("/",function(req,res){
const apiKey="ae148f2088da42d7a47ac8e44a4a2768";
const url="https://newsapi.org/v2/top-headlines?country=in&category=business&apiKey="+apiKey;
https.get(url,function(response){
response.on("data",function(data){
const news=JSON.parse(JSON.stringify(data));
res.send("news data"+news);
})
})
})
app.listen(3000, function() {
console.log("Server started on port 3000");
});
解决方案
每当您从 HTTP 流中获取一些数据时,就会触发该data
事件。它将触发多次,直到所有数据都到达。
因此,使用您当前的代码,您会send
为每个请求多次调用。
您需要将该数据存储在某处(例如将其连接到一个变量中),然后仅在end
事件触发时对其进行处理。
更好的方法可能是停止使用内置https
模块并使用具有更现代设计的东西(例如 Axios)。
推荐阅读
- amazon-web-services - AWS Cross Account billing alerts
- postgresql - 两列中的Postgres不同查询
- php - Use Twig in Wordpress plugin , but clashes with WPML
- html - 在较小的屏幕上修复图像尺寸 - 图像缩小得太小
- reactjs - 带反应的中继器
- regex - 使用正则表达式从 Pandas 列中的集合中搜索关键字/短语
- javascript - 反应,三元运算符无法正常工作
- vue.js - 在“vue2-dropzone”中找不到导出“vue2Dropzone”
- jquery - 使 HTML5 视频的持续时间指示器向上计数而不是向下计数
- php - 如何从查询生成器 Laravel 中的不同表中选择一个值