app.get('/', function (req, res) { mongoose.connect('mongodb://localhost/todo-list') Todo.find({completed: false}, function (err, todos) { if (err) throw err res.render('homepage', { allTodos: todos }) mongoose.disconnect() }) }) // app.post('/create', function (req, res) { // console.log(req.body) // res.send(req.body) todosController.create(req, res) }) app.get('/listall', function (req, res) { res.redirect('/listall') todosController.list(req, res) }) // and below is my controller function list (req, res) { if (!mongoose.connection.db) mongoose.connect('mongodb://localhost/todo-list') Todo.find({}, function (err, todos) { if (err) throw err res.render('listall', { allTodos: todos }) mongoose.disconnect() }) }¿Puede alguien decirme cómo arreglar esto >.< express muestra el error "No se pueden configurar los encabezados después de que se envían". en ServerResponse.setHeader (_http_outgoing.js:371:11)
El problema proviene de intentar enviar la solicitud al usuario dos veces (a través de procesamiento y redirección), aquí:
app.get('/listall', function (req, res) { res.redirect('/listall') todosController.list(req, res) })Está redirigiendo al usuario a la vista de lista, pero luego está invocando el método de lista, que intenta mostrar otra página aquí:
res.render('listall', { allTodos: todos })Tienes que decidir, si quieres redirigir al usuario a la página, o mostrárselo, y eliminar uno de los anteriores.
Solo tiene que eliminar esta línea y su ruta /listall debería funcionar:
res.redirect('/listall')Su función todosController.list(req, res) parece tener también un método res.send/res.redirect ... . Pero solo puede enviar una respuesta una vez, por lo que si hay otras respuestas. métodos en su flujo de solicitud obtiene este error.
Puede redirigir al usuario desde su método todosController.list y eliminarlo de aquí app.get('/listall', function (req, res) { res.redirect('/listall') todosController.list(req, res) })
Pero tenga cuidado de no enviar res. más de una vez en un solo req. caudal.