我正在尝试创建一个简单的没有任何数据库的NodeJS和Express的REST API。我已经将所有数据存储在JSON文件中。数据是对象数组的形式。
我有像fund-name/: 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([]);
});
});
当我点击网址 http:localhost:3000/基金详细信息/1234
时,我收到以下错误:
错误[ERR_HTTP_HEADERS_SENT]:在ServerResponse.header(/home/username/Desktop/data-server/node_modules/Express/l ib/response.js:767ServerResponse.setHeader(_http_outgoing.js:470: 11)发送到客户端后无法设置标头
当我不传递任何路径参数来获取所有资金时,它工作正常。我哪里出错了??
方法 res.json(基金)
是按基金详情中的每个项目调用的,然后调用另一个 res.json([])
方法。这会导致您的响应被多次发回(这不应该发生,每个 API 调用只应使用 1 个响应)。
我建议您使用一个数组并推回具有匹配端口 ID 的对象,然后在操作完成后将数组发送回用户。说实话,你甚至不需要标志变量来检查资金是否存在,因为如果它们不存在,你空的数据数组就会被发送回去。
var data = [];
fundDetails.forEach(fund => {
if (fund.portId === portId)
data.push(fund);
});
res.json(data);
此错误是因为您在单个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()
}
});
我在NodeJS中使用Passport.js、Express和Mongoose时遇到了这个奇怪的问题。基本上,即使我只发送了一个头,我还是得到一个错误,说“不能在头被发送到客户端后设置它们”。 我读过其他帖子并尝试过,但没有一个有效。 应用程序。get-res.send与return res.send之间有什么区别吗 错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设
所以我看到了一篇很棒的帖子“错误:发送到客户端后无法设置标题,但仍然不明白我的“标题”部分有什么问题,因为当我将它从注释掉的
首先,我为拼写错误道歉,我是巴西人 我访问了下面的问题,但它没有帮助我解决问题 ERR_HTTP_HEADERS_SENT:将标头发送到客户端后,无法设置标头 我有一个方法,我从路由调用在第一个请求,它按预期工作 但在下一个命令中,它返回以下错误 我的代码 我尝试使用失败 这个方法返回一个从excel电子表格中读取的对象 服务器我的代码出错
我正在关注一个关于udemy上的节点.js的课程,这有点过时了,遇到了这些错误,我无法找到解决方案。 我尝试了什么: 使用next(); 在所有if语句中添加返回res 有人能帮我修一下这些吗?我将不胜感激! 提前感谢! 用户名存在错误:错误 [ERR_HTTP_HEADERS_SENT]:在服务器响应.set 上将标头发送到客户端后无法设置标头 (_http_outgoing.js:526:11
我得到状态代码201,但是当我尝试重定向到approval_url时,我得到 错误[ERR_HTTP_HEADERS_SENT]:无法在发送到客户端后设置标头 当我手动单击approval_url时,我尝试不重定向,所有工作都很好。 服务器启动!{id:'payid-l3azrlq4la763246g079113e',意图:'sale',状态:'created',付款人:{payment_meth
问题内容: 将标头发送到客户端后,无法设置标头。这是请求验证后的后端错误,看起来像标头问题。我为我的项目脏代码感到抱歉,我还需要做其他事情,因此在注释中有一些代码。这是我的代码 您可以在我的代码中发现其他错误,因为我尝试了许多不同的方法。这是passport.js配置文件 这是身份验证的ajax请求 非常感谢你。 问题答案: 这是由于您的代码试图从authenticate函数发送多个响应。 删除其