2015-11-19 3 views
5

Ich bin auf official restify guide zu socketio mit restify verwenden.'Header bereits gesendet' Fehler bei der Verwendung von restify mit socket.io

api.js

var mongoose = require('mongoose'); 
var restify = require('restify'); 
var fs = require('fs'); 
var server = restify.createServer({ 
    name: 'myapp', 
    version: '1.0.0' 
}); 
var io = require('socket.io')(server); 
server.get('/', function indexHTML(req, res, next) { 
    fs.readFile(__dirname + '/sockettest.html', function (err, data) { 
     if (err) { 
      next(err); 
      return; 
     } 

     res.setHeader('Content-Type', 'text/html'); 
     res.writeHead(200); 
     res.end(data); 
     next(); 
    }); 
}); 
io.on('connection', function(socket){ 
    console.log('a user connected'); 
}); 

sockettest.html

<html> 
<script src="https://cdn.socket.io/socket.io-1.3.7.js"></script> 
<script> 
    var socket = io(); 
</script> 
</html> 

Wenn ich wechseln Sie zu localhost:3000 ich diesen Fehler:

myapp listening at http://[::]:3000 
_http_outgoing.js:350 
    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_outgoing.js:350:11) 
    at ServerResponse.format (/host/bid-it/bid-it/node_modules/restify/lib/response.js:145:10) 
    at ServerResponse.send (/host/bid-it/bid-it/node_modules/restify/lib/response.js:338:14) 
    at emitRouteError (/host/bid-it/bid-it/node_modules/restify/lib/server.js:201:13) 
    at onRoute (/host/bid-it/bid-it/node_modules/restify/lib/server.js:754:21) 
    at Router.find (/host/bid-it/bid-it/node_modules/restify/lib/router.js:608:5) 
    at Server._route (/host/bid-it/bid-it/node_modules/restify/lib/server.js:747:21) 
    at routeAndRun (/host/bid-it/bid-it/node_modules/restify/lib/server.js:705:14) 
    at Server._handle (/host/bid-it/bid-it/node_modules/restify/lib/server.js:725:9) 
    at Server.onRequest (/host/bid-it/bid-it/node_modules/restify/lib/server.js:326:14) 
    at emitTwo (events.js:87:13) 
    at Server.emit (events.js:172:7) 
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:525:12) 
    at HTTPParser.parserOnHeadersComplete (_http_common.js:88:23) 

Können Sie mir bitte sag mir wh bei vermisse ich?

Antwort

12

Mit

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

statt

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

mein Problem gelöst.

0

Versuchen Sie, die socket.io Parameter auf true setzen innerhalb von wo Sie Ihre restify Server erstellen, etwa so:

var server = restify.createServer({ 
    name: 'myapp', 
    version: '1.0.0, 
    socketio: true 
}); 

Dies das Problem für mich gelöst.

Verwandte Themen