繁体   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