我正在尝试使用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([]);
});
});
Run Code Online (Sandbox Code Playgroud)
当我点击url时http:localhost:3000/fund-details/1234,出现以下错误:
错误[ERR_HTTP_HEADERS_SENT]:将标头发送到ServerResponse.header上的ServerResponse.setHeader(_http_outgoing.js:470:11)(/ home / username / Desktop / data-server / node_modules / express / l ib)后,无法设置标头/response.js:767:10)
当我不通过任何路径参数来获取所有资金时,它会很好地工作。我要去哪里错了?
此错误是因为您在单个api调用中多次使用res.send()。
正确的方法
if(a){
res.send()
}else{
res.send()
}
Run Code Online (Sandbox Code Playgroud)
错误的方法
if(a){
res.send()
res.send()
}else{
res.send()
}
Run Code Online (Sandbox Code Playgroud)
在您的代码中。
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
});
});
Run Code Online (Sandbox Code Playgroud)
你可以试试
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()
}
});
Run Code Online (Sandbox Code Playgroud)