Невозможно установить заголовки после их отправки клиенту Express - PullRequest
0 голосов
/ 13 июля 2020

Я получаю сообщение об ошибке «Не удается установить заголовки после их отправки клиенту». Пожалуйста, помогите мне. Когда я пробую то же самое на почтальоне, он работает нормально.

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");
});

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Это ответ на вопрос. Проблема решена

const express = require("express");
const http = require("http");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const axios=require("axios");
const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
app.get("/",async function(req,res){
  const apiKey="ae148f2088da42d7a47ac8e44a4a2768";
 const url="http://newsapi.org/v2/top-headlines?country=in&category=business&apiKey=ae148f2088da42d7a47ac8e44a4a2768";
   await axios.get(url)
  .then((response) => {
    const d=response.data.articles[0].source.id;
    res.send(d);
  }) .catch((error) =>{
    console.log(error);
  })
});
app.listen(3000, function() {
  console.log("Server started on port 3000");
});
0 голосов
/ 13 июля 2020

Событие data срабатывает всякий раз, когда вы получаете данные из HTTP-потока. Он будет запускать несколько раз , пока не будут получены все данные.

Следовательно, с вашим текущим кодом вы будете звонить send несколько раз для каждого запроса.

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

Лучшим подходом могло бы быть прекращение использования встроенного модуля https и использование чего-нибудь с более современным дизайном (например, Ax ios).

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