问题
I'm having problems saving data to Firebase and then redirecting to another page. I'm getting Error: Can't set headers after they are sent.
I have read all the questions around this area on Stack but I can't get the following to work.
app.route('/blog-add')
.get(function(req, res){
var blogData = new Firebase(firebase_url+'blogs/');
var authData = blogData.getAuth();
var priority = 0 - Date.now();
if(authData == null) {
res.redirect('/');
return;
} else {
var auth = authData.auth.uid;
res.render('blog-add', {
title: 'Add Blog',
description: 'Add a Sup Blog',
login:auth
});
return;
}
})
.post(function(req, res){
// Post variables
var blogTitle = req.body.blogTitle;
var blogSlug = req.body.blogTitle.toLowerCase().replace(/[^\w ]+/g,'').replace(/ +/g,'-');
var blogContent = req.body.blogContent;
var blogKeywords = req.body.blogKeywords;
var blogDescription = req.body.blogDescription;
var blogAuthor = req.body.blogAuthor;
// Let's check Auth
var blogData = new Firebase(firebase_url+'blogs/'+blogSlug);
var authData = blogData.getAuth();
var priority = 0 - Date.now();
if(authData == null) {
res.redirect('/');
return;
} else {
// Save blog with priority
blogData.set({blogTitle:blogTitle},function(error){
if (error) {
console.log("Data could not be saved." + error);
return;
} else {
console.log("Data saved successfully.");
res.redirect('/blog/'+blogSlug);
return;
}
});
}
});
This is a simple bit of code to save a blog post. When I save, everything works and I save the post but i get the following message:
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (/Users/alexmbarton/Sites/blog/node_modules/express/lib/response.js:718:10)
at ServerResponse.send (/Users/alexmbarton/Sites/blog/node_modules/express/lib/response.js:163:12)
at done (/Users/alexmbarton/Sites/blog/node_modules/express/lib/response.js:957:10)
at Object.exports.renderFile (/Users/alexmbarton/Sites/blog/node_modules/jade/lib/index.js:374:12)
at View.exports.__express [as engine] (/Users/alexmbarton/Sites/blog/node_modules/jade/lib/index.js:417:11)
at View.render (/Users/alexmbarton/Sites/blog/node_modules/express/lib/view.js:126:8)
at tryRender (/Users/alexmbarton/Sites/blog/node_modules/express/lib/application.js:639:10)
at EventEmitter.render (/Users/alexmbarton/Sites/blog/node_modules/express/lib/application.js:591:3)
at ServerResponse.render (/Users/alexmbarton/Sites/blog/node_modules/express/lib/response.js:961:7)
I can't work out where I'm setting headers twice. Any advice would be very gratefully received.
来源:https://stackoverflow.com/questions/32889162/node-js-express-firebase-cant-set-headers-after-they-are-sent