Node.js Express Firebase Can't set headers after they are sent

≡放荡痞女 提交于 2019-12-25 06:46:55

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!