Can\'t set headers after they are sent

跟風遠走 提交于 2019-12-24 09:05:26

问题


I am trying to replicate the Sails application from this video.
Here is my UserController:

module.exports = {
    'new': function(req, res) {
        res.view()
    },
    'create': function(req, res, next) {
        User.create(req.params.all(), function userCreated(err, user) {
            if(err) {
                console.log(err);
                req.session.flash = {
                    err: err
                }
                return res.redirect('/user/new');
            }
            //res.redirect('/user/show/'+user.id);
            res.json(user);
        });
    },
    'show': function(req, res, next) {
        User.findOne(req.param('id'), function foundUser(err, user) {
            if(err) return next(err);
            if(!user) return next();
            res.view({
                user: user
            });
        });
    }
};

When I am trying to access the show function http://localhost/user/show/4 I am getting below error:

http.js:691                                                                                                                                           
    throw new Error('Can\'t set headers after they are sent.');                                                                                       
          ^                                                                                                                                           
Error: Can't set headers after they are sent.                                                                                                         
    at ServerResponse.OutgoingMessage.setHeader (http.js:691:11)                                                                                      
    at ServerResponse.res.setHeader (/home/codio/.nvm/v0.10.25/lib/node_modules/sails/node_modules/express/node_modules/connect/lib/patch.js:63:22)   
    at next (/home/codio/.nvm/v0.10.25/lib/node_modules/sails/node_modules/express/node_modules/connect/lib/proto.js:158:13)                          
    at resume (/home/codio/.nvm/v0.10.25/lib/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/static.js:65:7)              
    at SendStream.error (/home/codio/.nvm/v0.10.25/lib/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/static.js:80:37)   
    at SendStream.EventEmitter.emit (events.js:95:17)                                                                                                 
    at SendStream.error (/home/codio/.nvm/v0.10.25/lib/node_modules/sails/node_modules/express/node_modules/send/lib/send.js:147:51)                  
    at SendStream.onStatError (/home/codio/.nvm/v0.10.25/lib/node_modules/sails/node_modules/express/node_modules/send/lib/send.js:248:48)            
    at /home/codio/.nvm/v0.10.25/lib/node_modules/sails/node_modules/express/node_modules/send/lib/send.js:320:26                                     
    at Object.oncomplete (fs.js:107:15)

I am not able to fund out any solution for that. Can anyone please help me to resolve this issue?

Note: I am using Sails.Js version : v0.10.5


回答1:


I'm not seeing where the duplicate header is being sent, but what I'd do if I were you is to try rewriting your show handler to look like this:

'show': function(req, res, next) {
  User.findOne(req.param('id'), function foundUser(err, user) {
    if(err) {
      return next(err);
    } else if (!user) {
      return next();
    } else {
      res.view({
        user: user
      });
    }
  });
}

By forcing the if / else if / else flow, you GUARANTEE that only one of those statements will be ran. I'd give that a try and see if it fixes your issue, then continue debugging from there.



来源:https://stackoverflow.com/questions/26961421/can-t-set-headers-after-they-are-sent

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