gpt4 book ai didi

node.js - ERR_HTTP_HEADERS_SENT : Cannot set headers after they are sent to the client at ServerResponse

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:26 24 4
gpt4 key购买 nike

我正在尝试使用 NodeJS 和 Express 创建一个简单的 REST API,无需任何数据库。我已将所有数据存储在 JSON 文件中。数据采用对象数组的形式。

我有类似基金名称/:portId 的路径

所以我正在这样做:

const fundName = require('./json/fund-name.json');

app.get('/fund-details:portId', (req, res) => {

const portId = req.params.portId;
fundDetails.forEach(fund => {
if (fund.portId === portId) {
return res.json(fund);
}

return res.json([]);
});
});

当我点击 URL http:localhost:3000/fund-details/1234 时,出现以下错误:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at ServerResponse.setHeader (_http_outgoing.js:470:11) at ServerResponse.header (/home/username/Desktop/data-server/node_modules/express/l ib/response.js:767:10)

当我不传递任何路径参数来获取所有资金时,它工作正常。我哪里错了??

最佳答案

此错误是因为您在单个 api 调用中多次使用 res.send() 。
正确方法

if(a){
res.send()
}else{
res.send()
}

错误的方式

if(a){
res.send()
res.send()
}else{
res.send()
}

在您的代码中。

app.get('/fund-details:portId', (req, res) => {
const portId = req.params.portId;
fundDetails.forEach(fund => {
if (fund.portId === portId) {
return res.json(fund); // many or single times here
}
return res.json([]); // and here when fund !==portId here
});
});

你可以试试

app.get('/fund-details:portId', (req, res) => {

const portId = req.params.portId;
var flag
var data = []
fundDetails.forEach(fund => {

if (fund.portId === portId) {
flag=true
data.push(fund)
}
});
if(flag){
res.send(data);
}else{
res.send()
}
});

关于node.js - ERR_HTTP_HEADERS_SENT : Cannot set headers after they are sent to the client at ServerResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54079531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com