Wir sind derzeit mit einer Uncaught Error: Can't set headers after they are sent.
Fehlermeldung beim Versuch, eine Benutzeranmeldung in einen Test mit Chai-HTTP verketten .Kann Header nicht festlegen, nachdem sie gesendet werden Fehler beim Versuch, Benutzersitzung für einen Test mit Chai-Anfrage-Agent
Der Test meldet sich als Benutzer an, der bereits in der Datenbank über unsere API vorhanden ist und dann versuchen soll, alle Elemente aus einer vorhandenen Route abzurufen. Unser aktueller Test ist unterhalb, der das Beispiel, das in der Chai-HTTP-Dokumentation http://chaijs.com/plugins/chai-http/#retaining-cookies-with-each-request angegeben ist, sehr genau widerspiegelt.
it('should return all notes on /api/notes GET', function (done) {
agent
.post('/users/register')
.send(user)
.then(function() {
return agent
.get('/api/notes')
.end(function (err, res) {
// expectations
done();
});
});
});
Unser Stack-Trace
Uncaught Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11)
at ServerResponse.header (node_modules/express/lib/response.js:718:10)
at ServerResponse.send (node_modules/express/lib/response.js:163:12)
at ServerResponse.json (node_modules/express/lib/response.js:249:15)
at app/routes/usersRouter.js:16:29
at node_modules/passport/lib/middleware/authenticate.js:236:29
at node_modules/passport/lib/http/request.js:51:48
at pass (node_modules/passport/lib/authenticator.js:287:14)
at Authenticator.serializeUser (node_modules/passport/lib/authenticator.js:289:5)
at IncomingMessage.req.login.req.logIn (node_modules/passport/lib/http/request.js:50:29)
at Strategy.strategy.success (node_modules/passport/lib/middleware/authenticate.js:235:13)
at verified (node_modules/passport-local/lib/strategy.js:83:10)
at InternalFieldObject.ondone (node_modules/passport-local-mongoose/lib/passport-local-mongoose.js:149:24)
Dies ist die, die den Fehler zu sein scheinen auf unserem Benutzer Router-Funktion aufgerufen wird erhöht (nicht manuell angehoben, nur ausgelöst, wenn chai mit)
router.post('/register', function(req, res) {
User.register(new User({ username : req.body.username }), req.body.password, function(err, user) {
if (err) {
res.status(500).json({info: err});
}
passport.authenticate('local')(req, res, function() {
res.status(200).json({info: "success"});
});
});
});
Manuelles Testen dieser Funktionalität funktioniert einwandfrei, das Problem scheint lediglich auf unseren Test und seine Interaktion mit dem Pass zurückzuführen zu sein.
Hat jemand irgendwelche Vorschläge oder Hinweise, die hilfreich sein könnten?
Haben Sie versucht, 'return;' unmittelbar nach 'res.status (500) .json ({info: err});'? Welche Zeile ist Zeile 16 in Ihrem 'usersRouter.js'? – mscdex
Zeile 16 jetzt, nachdem Ihre vorgeschlagene Änderung lautet: 'return res.json ({'ERROR': err});', jedoch immer noch den gleichen Fehler zurück. –
Warum verwenden Sie Ende anstelle von dann? In Ihrem Beispiel mischen Sie Versprechen mit klassischen Rückrufen, vielleicht sollten Sie versuchen, es zu ändern? –