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