2017-06-27 1 views
0

Ich bin mit einem seltsamen Problem konfrontiert, während ich eine einfache todo MEAN Anwendung benutze, die ich eine entfernte Datenbank benutze und wann immer ich einen Datensatz aktualisiere oder lösche immer aber meistens), wirft sie den Fehler:Knoten, Mongo, Mongoos - Kopfzeilen können nicht gesetzt werden, nachdem sie gesendet wurden

events.js:160 
     throw er; // Unhandled 'error' event 
    ^

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11) 
    at ServerResponse.header (E:\Examples\mean-stack-todo\node_modules\express\lib\response.js:730:10) 
    at ServerResponse.json (E:\Examples\mean-stack-todo\node_modules\express\lib\response.js:253:10) 
    at E:\Examples\mean-stack-todo\app\routes.js:11:13 
    at E:\Examples\mean-stack-todo\node_modules\mongoose\lib\model.js:3800:16 
    at E:\Examples\mean-stack-todo\node_modules\kareem\index.js:220:48 
    at E:\Examples\mean-stack-todo\node_modules\kareem\index.js:131:16 
    at _combinedTickCallback (internal/process/next_tick.js:73:7) 
    at process._tickCallback (internal/process/next_tick.js:104:9) 

Dieser Fehler mit POST auftritt und DELETE wo Implementierungen sind:

app.post('/api/todos', function (req, res) { 

    // create a todo, information comes from AJAX request from Angular 
    Todo.create({ 
     text: req.body.text, 
     done: false 
    }, function (err, todo) { 
     if (err) { 
      res.send(err); 
     } 

     // get and return all the todos after you create another 
     getTodos(res); 
    }); 
}); 

und löschen:

// delete a todo 
app.delete('/api/todos/:todo_id', function (req, res) { 
    Todo.remove({ 
     _id: req.params.todo_id 
    }, function (err, todo) { 
     if (err) { 
      res.send(err); 
     } 

     getTodos(res); 
    }); 
}); 

Ich weiß nicht, woher der Fehler stammt.

+1

was macht die 'getTodos (res)' tut –

+2

Sie senden Antwort mehr als 1 Mal. Überprüfen Sie die 'getTodos'-Funktion. Und ändern Sie auch 'res.send (err);' zu 'return.send (err);' – Edgar

Antwort

1

Error: Can't set headers after they are sent

Dies bedeutet, dass Sie eine Antwort zweimal oder öfter gesendet haben, das ist nicht möglich.

Bei einem Fehler müssen Sie Return verwenden, sonst getTodos Funktion wird aufgerufen und ich denke, Sie zweimal, beim ersten Mal beim ersten Mal Fehler und zweiten Mal in getTodos Funktion.

// delete a todo 
app.delete('/api/todos/:todo_id', function (req, res) { 
    Todo.remove({ 
     _id: req.params.todo_id 
    }, function (err, todo) { 
     if (err) { 
      // added the return 
      return res.send(err); 
     } 

     getTodos(res); 
    }); 
}); 
+0

Vielen Dank, wie es funktioniert hat. Aber ich bekomme jetzt den Fehler 'TypeError: Kann die Eigenschaft 'electionId' von undefined 'in POST und DELETE nicht lesen. Irgendeine Idee? –

+0

Das bedeutet, dass Sie versuchen, auf eine Objekteigenschaft mit dem Namen 'electionId' auf einen nicht definierten Wert zuzugreifen. Sie müssen mehr Code zeigen, ich kann keine electionId sehen. Aber von dem Fehler, den Sie tun, etwas wie '' 'yourObject.selectionId'' wo yourObject undefiniert ist. – Gatsbill

Verwandte Themen