发送到客户端后无法设置标头?

时间:2021-03-31 20:49:38

标签: node.js express

这里我试图从服务器获取数据,但是当我尝试打开浏览器并获取数据时,什么也没有出现,它在浏览器中给了我相同的 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')
    }
}

2 个答案:

答案 0 :(得分:1)

响应对象不一定会对整个响应进行批处理,并且可能会在可用时开始发送它。 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) {

答案 1 :(得分:0)

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