【问题标题】:Cannot set headers after they are sent to the client?发送到客户端后无法设置标头?
【发布时间】:2021-06-27 21:34:07
【问题描述】:

我在这里尝试从服务器获取数据,但是当我尝试打开浏览器并获取数据时,什么也没有出现,它在浏览器中给了我相同的 URL。

UnhandledPromiseRejectionWarning:错误 [ERR_HTTP_HEADERS_SENT]:

// Application Dependencies
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const superAgent = require('superagent');

// Application Setup
const PORT = process.env.PORT || 3000;
const app = express();
app.use(cors());

//KEYS
const WEATHER_API_KEY = process.env.WEATHER_API_KEY;
const GEOCODE_API_KEY = process.env.GEOCODE_API_KEY;
const PARK_KEY = process.env.PARK_KEY;

//Route Definitions
app.get('/location', locationHandler);
app.get('/weather', weatherHandler);
app.get('/parks', parksHandler);
app.get('*', errorHandler);

//Location Handler
async function locationHandler(req, res) {
    try {
        console.log(req.query);
        let getCity = req.query.city;
        let url = `https://us1.locationiq.com/v1/search.php?key=pk.9e079e96352c63d18cf387532fa6b9ad&q=seattle&format=json`;
        const locationData = await superAgent.get(url);
        const apiData = JSON.parse(locationData.text);
        console.log(superAgent.get(url))
        res.send(superAgent.get(url));
        // let aaa = new City(getCity, apiData[0].display_name, apiData[0].lat, apiData[0].lon);
        // console.log(aaa);
        res.status(200).send(new City(getCity, apiData[0].display_name, apiData[0].lat, apiData[0].lon));
    } catch (error) {
        res.status(404).send('Something went wrong in LOCATION route')
    }
}

【问题讨论】:

  • 无法响应两次,header发送后无法再次发送。
  • 非常感谢????

标签: node.js express


【解决方案1】:

您不能多次发送回复。 所以删除这一行:res.send(superAgent.get(url));

【讨论】:

    【解决方案2】:

    响应对象不一定要对整个响应进行批处理,并且可能会在可用时开始发送它。 HTTP 要求在其他任何内容之前写入标头。一旦写入其他内容,就无法发送标头,例如更改状态码。

    您可以重构代码以先发送状态:

        res.status(200)
        res.send(superAgent.get(url));
        res.send(new City(getCity, apiData[0].display_name, apiData[0].lat, apiData[0].lon));
    } catch (error) {
    

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 2018-05-25
      • 2021-06-18
      • 2020-11-14
      • 2020-09-05
      • 2019-02-06
      • 2020-05-20
      • 2020-11-02
      相关资源
      最近更新 更多