[英]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.