我正在尝试使用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([]);
    });
});

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



当我没有通过任何路径参数来获取所有资金时,它会很好地工作。
我要去哪里错了?

最佳答案

此错误是因为您在单个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/

10-12 20:05