簡體   English   中英

在 Node.JS 中發送到客戶端后無法設置標頭

[英]Cannot set headers after they are sent to the client in Node.JS

我對 Node.JS 很陌生,我正在嘗試創建一個 GET 端點來從 MongoDB 檢索一些信息。 我已經設置了我的路線和我的控制器來處理 GET 請求。 當我用 Postman 測試這個控制器時,我在 Node 控制台上收到一個錯誤,“在發送到客戶端后無法設置標頭”,但我可以在 Postman 響應中看到正確的結果。 我的代碼如下:

'use strict'
const Area = require('../models/area');

exports.get_areas = (req, res, next)=> {
Area.find( {})
    .then(data=>{
        let flat = data.reduce((data, {price, streets}) => {
            streets.forEach(({name, locations}) => {
                locations.forEach(({type,code}) => {
                    data.push({price,name,type,code})
                })
            })
            res.json(data);

        }, [])
        console.log(flat);


    })
    .catch(error=>{
        return next(error);
    });

}

如果我只有沒有減速器的控制器。 我沒有這個問題:

exports.get_areas = (req, res, next)=> {
Area.find( {})
    .then(data=>{
            res.json(data);
        })
    .catch(error=>{
        return next(error);
    });
}

在這種情況下,我的 JSON 對象具有以下結構:

[{
    "price": 20,
    "streets":[{
           "name": "nameA",
           "locations":[{
               "type": "normal",
               "code": "code1"
            }]
        }]
 }]

我的錯誤在哪里? 我想返回一個平面 JSON 而不是嵌套的 JSOn,因此我試圖使用 reduce()。

這是因為您將數據返回為res.json(data); 循環內。 當您嘗試向單個請求發送多個響應量時,將其移出 reduce 功能代碼塊。

let flat = data.reduce((data, {price, streets}) => {
    streets.forEach(({name, locations}) => {
        locations.forEach(({type,code}) => {
            data.push({price,name,type,code})
        })
    })

}, [])
res.json(flat);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM