我已经阅读了同样问题的几个问题,但没有一个问题适用于我的个人案例。我正在尝试删除ng-repeat列表中的条目。
这是我的观点(ng-show用于编辑目的):
<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>
我的角度控制器:
// 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连接到我的数据库。
我在这里缺少什么?
答案 0 :(得分:2)
两个响应返回同一个if块,所以冲突标题.....
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
});
});
答案 1 :(得分:1)
将其置于if else
状态。发送响应后,它会继续并尝试再次发送,这会导致此异常。
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);
});
}
});
});
答案 2 :(得分:0)
您的代码将错误响应发送回客户端,然后它会尝试发送JSON响应。第一个响应结束了请求/响应过程,这意味着第二个响应无法再发送,并且在发送错误后会抛出无法设置标头。
要解决此问题,我的错误处理总是return early。这将结束请求/响应周期,然后从函数返回,以便不会执行其后面的任何代码。
if (err) return res.send(err);
res.json(entries)