Estoy tratando de crear una aplicación CRUD básica y tengo problemas durante la depuración. Para compilar mi aplicación CRUD, actualmente estoy usando node.js, express y mongodb . Cualquier ayuda que todos ustedes puedan proporcionar sería realmente muy útil.
context: como referencia estoy usando esto:
https://zellwk.com/blog/crud-express-mongodb/, currently on "Showing quotes to users"mi problema: recibo el siguiente error con mi código y no estoy seguro de si esto se debe a la ubicación de mi código.
Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11) at ServerResponse.header (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:725:10) at ServerResponse.contentType (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:558:15) at ServerResponse.send (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:145:14) at done (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\response.js:962:10) at tryHandleCache (C:\Users\hcqph\gitprojects\crudbeta\node_modules\ejs\lib\ejs.js:208:10) at View.exports.renderFile [as engine] (C:\Users\hcqph\gitprojects\crudbeta\node_modules\ejs\lib\ejs.js:412:10) at View.render (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\view.js:128:8) at tryRender (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\application.js:640:10) at EventEmitter.render (C:\Users\hcqph\gitprojects\crudbeta\node_modules\express\lib\application.js:592:3)este es mi código:
app.use(bodyParser.urlencoded({extended: true})) //set 'ejs' template engine, and default extension is ejs app.set('view engine', 'ejs') /* -------- for team documentation -------- => = replacement for function app.get hand a GET request (read operation) ------------------------------------------------ */ app.get('/', (req, res) => { //serves index.html back to browser res.sendFile(__dirname + '/index.html') //gets list of trips from mlab.com var cursor = db.collection('trips').find() //retrieves list of trips retrieved from mlab db.collection('trips').find().toArray(function(err, results) { if(err) return console.log(err) //renders index.ejs res.render('index.ejs', {trips:results}) }) }) /* app.post handles a create request */ app.post('/trips', (req, res) => { db.collection('trips').save(req.body, (err, result) =>{ if (err) return console.log(err) console.log('saved to database') res.redirect('/') //causes browser to reload }) })¿Es por donde estoy jugando mi app.set? ¿Cómo puedo arreglar esto?
Además, ¿estoy haciendo referencia a mi res.render para index.ejs correctamente si está anidado dentro de las vistas de carpeta?
No puede enviar dos respuestas para una solicitud
elimine una de las líneas de su código:
O
O
What's happening in your code:
Cuando / get request se activa, el nodo lo redirige al archivo index.html, pero el siguiente se ejecuta simultáneamente y se procesa en el archivo index.ejs, lo que genera un error porque el nodo ya envió una respuesta, ahora no puede enviar encabezados en respuesta a solicitudes anteriores nuevamente.
Así que tienes que eliminar una de las líneas mencionadas anteriormente.