Firebase.update () crashes nodejs server: Unable to customize headers after sending them

I am trying to update the firebase location from my server.js file in nodejs. Using .update()

from the firebase api causes the application to crash and crash and the error "Unable to set headers after they are sent." If I comment out the code updating the firebase location there is no error. Does anyone know the reason for this?

Code causing the error:

app.post('/updateFire', function(req,res){
    var updateInfo = req.body;
    console.log(updateInfo);
    var onComplete = function(error) {
        if (error) {
            console.log('Synchronization failed');
        } else {
            console.log('Synchronization succeeded');
            res.json('done');
        }
    };
    ref.update({points:updateInfo.points,totalAmount:updateInfo.totalAmount}, onComplete);
});

      

But if you take this code and execute a simple response to the client, it doesn't throw an error:

app.post('/updateFire', function(req,res){
    var updateInfo = req.body;
    console.log(updateInfo);
    res.json('done');
});

      

What happens to firebase .update()

that is causing the crash?

CONSOLE UPDATE ERROR FROM FIREBASE

I assume the console was outputting an error from firebase:

FIREBASE WARNING: Exception was thrown by user callback. Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
    at ServerResponse.header (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/response.js:695:10)
    at ServerResponse.send (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/response.js:146:12)
    at ServerResponse.json (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/response.js:235:15)
    at /Users/chaselester/Sites/Development/chore-tracker/chore-angular/app.js:36:13
    at /Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/firebase/lib/firebase-node.js:49:642
    at Ab (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/firebase/lib/firebase-node.js:46:165)
    at wb (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/firebase/lib/firebase-node.js:22:216)
    at xb (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/firebase/lib/firebase-node.js:21:1260)
    at Qh.g.update (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/firebase/lib/firebase-node.js:204:471) 
/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/firebase/lib/firebase-node.js:46
ion(){P("Exception was thrown by user callback.",b.stack||"");throw b;},Math.f

      

STACK TRACE ERROR:

stack trace:  Error
    at /Users/chaselester/Sites/Development/chore-tracker/chore-angular/app.js:56:17
    at Layer.handle [as handle_request] (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/layer.js:82:5)
    at next (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/route.js:110:13)
    at Route.dispatch (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/route.js:91:3)
    at Layer.handle [as handle_request] (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/layer.js:82:5)
    at /Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/index.js:267:22
    at Function.proto.process_params (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/index.js:321:12)
    at next (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/index.js:261:10)
    at /Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/index.js:603:15
    at next (/Users/chaselester/Sites/Development/chore-tracker/chore-angular/node_modules/express/lib/router/index.js:246:14)

      

+3


source to share


1 answer


According to my experience (same error), you should be reading data from Firebase with the .on ('value', fn) method somewhere in your code. You have to change it to .once ('value', fn). Because the .on ('value', fn) method takes you back when you .update () the data in Firebase and maybe try res.send ({}) again. This is why you get the message "Unable to set headers after sending them."



0


source







All Articles