Cuando elimino el comentario de una línea de código, recibo este error: _http_outgoing.js: 359 lanza un nuevo error (‘No se pueden establecer encabezados después de que se envían.’);

Cuando elimino el comentario de esta línea: return done(null, false, { message: 'Incorrect username' }); en el siguiente código, Node.js se ejecuta sin ningún error, de lo contrario, Node.js da un error que se menciona más adelante:

 //we need to define a local Strategy to authenticate with username and password passport.use(new LocalStrategy( function(username, password, done) { //start of custom code //from here starts our custom code (inside this function scope) //outside this scope is from passport API documentation //process.nextTick(function() { UserFind(username, function(err, user) { if (err) { return done(err); } else if (!user || user.length == 0) { //When I uncomment the following line of code, an error occurs, but when I comment out the following, no error is received: //return done(null, false, { message: 'Incorrect username' }); } else { console.log('user._id:' + user._id); console.log('typeof user: ' + typeof(user)); console.log('user.username: ' + user.username); console.log('user.password: ' + user.password); if (password !== user.password) { return done(null, false, { message: 'Incorrect password' }); } return done(null, user); } }) //}) //process.nextTick } //end of custom code )); 

El error recibido al descomponer la línea mencionada:

_http_outgoing.js: 359 lanza un nuevo error (‘No se pueden establecer encabezados después de que se envían’); ^

Error: No se pueden establecer encabezados después de que se envían. at ServerResponse.setHeader (_http_outgoing.js: 359: 11) at ServerResponse.header (/home/ict/Documents/hookahDB/serverjs/node_modules/express/lib/response.js:719:10) at ServerResponse.location / home /ict/Documents/hookahDB/serverjs/node_modules/express/lib/response.js:836:15) en ServerResponse.redirect (/home/ict/Documents/hookahDB/serverjs/node_modules/express/lib/response.js:874 : 18) at allFailed (/home/ict/Documents/hookahDB/serverjs/node_modules/passport/lib/middleware/authenticate.js:132:20) en el bash (/ home / ict / Documents / hookahDB / serverjs / node_modules / passport /lib/middleware/authenticate.js:167:28) en Strategy.strategy.fail (/home/ict/Documents/hookahDB/serverjs/node_modules/passport/lib/middleware/authenticate.js:284:9) en verificado ( /home/ict/Documents/hookahDB/serverjs/node_modules/passport-local/lib/strategy.js:82:30) en /home/ict/Documents/hookahDB/serverjs/index.js:158:28 at / home / ict / Documents / hookahDB / serverjs / index.js: 144: 16

Me pregunto por qué esa única línea es la causa del error y cómo puedo resolverlo. Gracias.

EDITAR

La función de callback se muestra a continuación:

 function UserFind(username, cb) { db.view('users/by_username', function(err, res) { if (err) { //db.view returned error return cb(err); } res.forEach(function(key, value, id) { //1st input=key|username, 2nd input=value|userDocument, 3rd input=id|_id //console.log('key: '+key+' row: '+row+' id: '+ id); if (username === key) { //found the user return cb(false, value); } }) //couldn't find the user by forEach loop return cb(false, false); }) } 

Ese mensaje de error se debe a un error de tiempo en el manejo de una respuesta asíncrona que provoca que intente enviar datos en una respuesta después de que la respuesta ya haya sido enviada.

Generalmente ocurre cuando las personas tratan una respuesta asíncrona dentro de una ruta expresa como una respuesta sincrónica y terminan enviando datos dos veces.

Usted debe agregar otra cosa en su statement

 if (password !== user.password) { return done(null, false, { message: 'Incorrect password' }); } else { return done(null, user); } 

Actualizar:

 function UserFind(username, cb) { var userFound = false, userVal = ""; db.view('users/by_username', function(err, res) { if (err) { //db.view returned error return cb(err); } res.forEach(function(key, value, id) { //1st input=key|username, 2nd input=value|userDocument, 3rd input=id|_id //console.log('key: '+key+' row: '+row+' id: '+ id); if (username === key) { //found the user userFound = true; userVal = value; } }); if (userFound) { return cb(false, userVal); } else { // User did not found return cb(false, false); } }) } 
    Intereting Posts