node.js - 发送后无法设置 header

标签 node.js sails.js

我正在尝试从 this video 复制 Sails 应用程序.
这是我的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
            });
        });
    }
};

当我尝试访问显示函数http://localhost/user/show/4时,出现以下错误:

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)

我无法为此提供任何解决方案。谁能帮我解决这个问题吗?

注意:我使用的是 Sails.Js 版本:v0.10.5

最佳答案

我没有看到重复的 header 被发送到哪里,但如果我是你,我会做的是尝试重写你的显示处理程序,如下所示:

'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
      });
    }
  });
}

通过强制执行 if/else if/else 流程,您可以保证仅运行这些语句之一。我会尝试一下,看看它是否可以解决您的问题,然后从那里继续调试。

关于node.js - 发送后无法设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26961421/

相关文章:

node.js - 在此 node.js 函数中运行多个 MySQL 查询

node.js - Yeoman、Grunt 和 Nitrous.IO

javascript - 访问服务器端 javascript 变量以使用客户端 javascript 进行操作

mysql - 使用 Sails.js 查询 MySql 表

node.js - Sailsjs 错误 : Cannot write to response more than once at onlyAllowOneResponse

javascript - Sails.js index.ejs Controller 逻辑

Node.JS 找不到模块 'xml2js' (Windows)

javascript - sails.js:如何禁用 etag

node.js - AJV 使用 JSONPath 字符串验证架构

javascript - 我如何在 sails.js 中为我的 api 命名空间,如 so/api/v1?