2015-04-03 17 views
0

Я пытаюсь настроить систему чата с помощью Express. Я просто мигрировали из v.3 в v.4 и теперь я получаю сообщение об ошибке:Экспресс 4 Ошибка: не удается установить заголовки после их отправки

info - socket.io started 
Express server listening on port 3000 
GET/304 790.443 ms - - 
Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (http.js:707:11) 
    at ServerResponse.res.setHeader (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/connect/lib/patch.js:134:22) 
    at Object.expressInit [as handle] (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/lib/middleware.js:20:42) 
    at next (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/connect/lib/proto.js:174:15) 
    at Object.query [as handle] (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/connect/lib/middleware/query.js:43:5) 
    at next (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/connect/lib/proto.js:174:15) 
    at Function.app.handle (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/connect/lib/proto.js:182:3) 
    at Server.app (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/connect/lib/connect.js:67:37) 
    at Manager.handleRequest (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/socket.io/lib/manager.js:564:28) 
    at Server.<anonymous> (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/socket.io/lib/manager.js:118:10) 
GET /javascripts/jquery.min.js 304 7.874 ms - - 
GET /javascripts/jquery.min.js 304 7.966 ms - - 
GET /javascripts/chat.js 304 4.132 ms - - 
GET /javascripts/chat.js 304 4.213 ms - - 
GET /socket.io/socket.io.js 404 11.137 ms - 35 
GET /stylesheets/style.css 304 1.715 ms - - 
GET /stylesheets/style.css 304 1.798 ms - - 
Error: Can't set headers after they are sent. 
    at SendStream.headersAlreadySent (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:319:13) 
    at SendStream.send (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:501:17) 
    at onstat (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:600:10) 
    at Object.oncomplete (fs.js:107:15) 
Error: Can't set headers after they are sent. 
    at SendStream.headersAlreadySent (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:319:13) 
    at SendStream.send (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:501:17) 
    at onstat (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:600:10) 
    at Object.oncomplete (fs.js:107:15) 
Error: Can't set headers after they are sent. 
    at SendStream.headersAlreadySent (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:319:13) 
    at SendStream.send (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:501:17) 
    at onstat (/Users/bruger/Google Drev/Uni/8. semester/Real-Time-Webapplikationer/0786OS_Code/Chapter 04/section02/awesome-chat/node_modules/express/node_modules/send/index.js:600:10) 
    at Object.oncomplete (fs.js:107:15) 
    debug - served static content /socket.io.js 

Когда я первый запуск экземпляра сервера, все кажется хорошо, пока я иду в браузер, то ошибка происходит ,

Я пытался решить эту проблему, читая почти все посты о

Error: Can't set headers after they are sent. 

Но я не могу понять, что я делаю неправильно? Heres моего кода, где я создал app.js файл:

var express = require('express') 
    , routes = require('./routes') 
    , http = require('http') 
    , path = require('path'); 

var methodOverride = require('method-override')      
var json = require('json-middleware');        
var multipart = require('connect-multiparty');      
var multipartMiddleware = multipart();        

var app = express(); 

// Express 4 version 
var env = process.env.NODE_ENV || 'development'; 
if ('development' == env) { 
    // configure stuff here 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(json);              
    app.use('/public/javascripts/chat.js', multipartMiddleware);  
    //app.use(express.bodyParser());         
    //app.use(express.methodOverride());        
    app.use(methodOverride('_method')) 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
} 


app.get('/', routes.index); 

var server = http.createServer(app).listen(app.get('port'), function(){ 
    console.log("Express server listening on port " + app.get('port')); 
}); 

//routes.sockets.connect(server); 
require('./routes/sockets.js').initialize(server); 

Это может быть, что ошибка генерируется в моем index.js или socket.js файла, так что я тоже добавить их. index.js:

exports.index = function(req, res){ 
    res.render('index', { title: 'Express Chat' }); 
}; 

sockets.js:

var io = require('socket.io'); 

exports.initialize = function(server) { 
    io = io.listen(server); 
    io.sockets.on("connection", function(socket){ 
    socket.on('message', function(message){ 
     message= JSON.parse(message); 
     if(message.type == "userMessage"){ 
     socket.get('nickname', function(err, nickname){ 
      message.username=nickname; 
      socket.broadcast.send(JSON.stringify(message)); 
      message.type = "myMessage"; 
      socket.send(JSON.stringify(message)); 
     });   
     } 
    }); 

    socket.on("set_name", function(data){ 
     socket.set('nickname', data.name, function(){ 
     socket.emit('name_set', data); 
    socket.send(JSON.stringify({type:'serverMessage', message: 'Welcome to the most interesting chat room on earth!'}));   
     }); 
    }); 
    }); 
} 

Я новичок, чтобы выразить и Node.js и пытается получить мою голову вокруг него в течение двух дней в настоящее время, так что все помогают будет высоко оценен!

+0

Кроме того, обратите внимание, что вы всегда должны обернуть, JSON.parse в попытке поймать, чтобы быть в безопасности. Потому что, если что-то не отформатировано JSON, оно рухнет. – Duane

ответ

1

Эта ошибка обычно возникает из-за отсутствия return -направляющих ваших функций отправки, а затем что-то позже в выполнении также отправляет данные.

Чтобы смягчить это, вы всегда должны возвращать отправления.

return socket.send(JSON.stringify(message)); 

Это гарантирует, что несколько заголовков не установлены.

+0

Теперь я вернул оба файла socket.send(), но я получаю ту же ошибку? Это изменения, которые я сделал: 'return socket.send (JSON.stringify ({type: 'serverMessage', message: 'Добро пожаловать в самую интересную чатовую комнату на земле!'}));' –

Смежные вопросы