错误:发送后无法设置标题。 节点Expressjs

我已经阅读了几个同样的问题,但没有为我的个人情况工作。 我试图从ng-repeat列表中删除一个条目。

这是我的看法(ng显示是为了编辑的目的):

<tr ng-repeat="entry in entries" ng-cloak> <th>{{ $index + 1 }}</th> <td> <span ng-show="!editMode[$index]">{{ entry.username }}</span> <input ng-show="editMode[$index]" type="text" ng-model="entry.username"/> </td> <td> <span ng-show="!editMode[$index]">{{ entry.date }}</span> <input ng-show="editMode[$index]" value="{{entry.date}}"/> </td> <td> <span ng-show="!editMode[$index]">{{ entry.hours }}</span> <input ng-show="editMode[$index]" type="text" ng-model="entry.hours"/> </td> <td> <span ng-show="!editMode[$index]">{{ entry.payout }}</span> <input ng-show="editMode[$index]" type="text" ng-model="entry.payout"/> </td> <td> <button ng-show="!editMode[$index]" type="submit" class="btn btn-primary" ng-click="deleteEntry($index)">Delete</button> <button ng-show="!editMode[$index]" type="submit" class="btn btn-primary" ng-click="editEntry($index)">Edit</button> <button ng-show="editMode[$index]" type="submit" class="btn btn-primary" ng-click="saveUpdate($index)">Update</button> <button ng-show="editMode[$index]" type="submit" class="btn btn-primary" ng-click="cancelUpdate($index)">Cancel</button> </td> </tr> 

我的angular度控制器:

 // DELETE $scope.deleteEntry = function(id) { // delete entry from DB using clicked listing's id $http.delete('/api/entry/' + id) .success(function(data) { $scope.entry = data; }) .error(function(data) { console.log('Error: ' + data); }); // then update page with remaining entries $http.get('/api/entries').then(function(response){ $scope.entries = response.data; }); }; 

在我的apiController.js

 app.delete('/api/entry/:entry_id', function(req, res){ Entries.remove({ _id : req.params.entry_id }, function(err, entry) if (err) res.send(err); // get and return remaining entries Entries.find(function(err, entries) { if (err) res.send(err) res.json(entries); }); }); }); 

当我删除Entries.find函数时,错误消失,但删除调用不再起作用。

我正在使用mongoose连接到我的数据库。

我在这里错过了什么?

两个响应返回相同的如果块,所以冲突头…..

  app.delete('/api/entry/:entry_id', function(req, res){ Entries.remove({_id : req.params.entry_id}, function(err, entry) if (err){ res.send(err); } //end if block else{ // get and return remaining entries Entries.find(function(err, entries) { if (err){ res.send(err) } else{ res.json(entries); } }); } //end else block }); }); 

把它放在if else条件。 在发送响应之后,它继续并尝试再次发送,导致这个exception。

 app.delete('/api/entry/:entry_id', function(req, res){ Entries.remove({ _id : req.params.entry_id }, function(err, entry) if (err) res.send(err); else{ Entries.find(function(err, entries) { if (err) res.send(err) else res.json(entries); }); } }); }); 

您的代码将错误响应发送回客户端,然后立即尝试发送JSON响应。 第一个响应结束请求/响应过程,意味着第二个响应不能再发送,并在发送错误之后抛出不能设置标题

为了解决这个问题,我总是在error handling的早期返回 。 这结束了请求/响应循环,然后从函数返回,以便它后面的代码都不会被执行。

 if (err) return res.send(err); res.json(entries)