2016-03-29 14 views
1

Я прочитал несколько вопросов с этой же проблемой, но никто не работает для моего личного дела. Я пытаюсь удалить запись из списка ng-repeat.Ошибка: не удается установить заголовки после их отправки. Узел Expressjs

Это мой вид (в нг-шоу для редактирования):

<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, ошибка исчезает, но вызов delete больше не работает.

Я использую мангуст для подключения к моей БД.

Что мне здесь не хватает?

+0

ли запись идентификатор получение удаляется из БД? Это может быть ошибка при удалении идентификатора или при поиске записей. –

+0

@DhananjayaKuppu, нет, запись не удаляется из БД. Это большая проблема. – PanicBus

ответ

2

Два возврата ответа в этом же случае, если заголовки блоков, так что конфликт .....

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

Это фактически решает ошибку, поэтому я собираюсь отметить ее как правильный ответ, но, к сожалению, теперь мой метод удаления не работает! Это может быть другая проблема. – PanicBus

+0

ОБНОВЛЕНИЕ: это была другая проблема. Сейчас работает. Спасибо за помощь! – PanicBus

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); 
}); 
} 
    }); 
}); 
0

Ваш код отправляет ответный код об ошибке обратно клиенту, после чего он пытается отправить ответ JSON сразу после этого. Первый ответ завершает процесс запроса/ответа, что означает, что второй ответ больше не может быть отправлен и выбрасывает не может установить заголовки после их отправки. ошибка.

Чтобы решить эту проблему, я всегда return early в обработке ошибок. Это завершает цикл запроса/ответа, а затем возвращается из функции, так что ни один из следующего после нее кода не будет выполнен.

if (err) return res.send(err); 
res.json(entries) 
Смежные вопросы