7

私はnode.jsを学ぶのが初めてで、修正できないエラーに遭遇したようです。

これは非常に単純で初心者向けのコードなので、あまり説明する必要はありません。さらに、ローカルホストでは問題なく動作しますが、運用サーバーでは壊れます。

App.js

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

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 8000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

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

var server = app.listen(8000);
var io = require('socket.io').listen(server);

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

そして、ここに恐ろしいエラーがあります!

http.js:644
    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:644:11)
    at ServerResponse.res.setHeader (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/patch.js:59:22)
    at next (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/proto.js:153:13)
    at Function.app.handle (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/proto.js:198:3)
    at Server.app (/home1/artalatc/public_html/cloud1/node_modules/express/node_modules/connect/lib/connect.js:66:31)
    at Manager.handleRequest (/home1/artalatc/public_html/cloud1/node_modules/socket.io/lib/manager.js:564:28)
    at Server.<anonymous> (/home1/artalatc/public_html/cloud1/node_modules/socket.io/lib/manager.js:118:10)
    at Server.EventEmitter.emit (events.js:115:20)
    at HTTPParser.parser.onIncoming (http.js:1793:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)

var io = require('socket.io').listen(server);このようにコメントするとエラーが削除されるため、問題があるようです。

4

10 に答える 10

7

どのバージョンのノードを使用していますか?

0.9.x を使用していたときも同じ問題がありました。Node を 0.8.4 にダウングレードしたところ、問題は解決したようです。

私の最善の推測は、Socket.ioが同意しないNodeの何かが変更されたことです。

于 2012-08-13T15:02:49.910 に答える
4

アップグレードエクスプレス-3.1.0およびsocket.io-0.9.13

nodejs0.10では問題ありません

于 2013-03-14T03:24:50.677 に答える
2

私は同じ問題の仲間を持っていました

Express 3.0を使用している場合は、これを試してください:http: //codehenge.net/blog/2012/08/using-socket-io-with-express-3-x/

ノードのバージョンも確認してください。

node --version

v0.8.9またはその他の安定バージョンを使用してみてください

それは私を助けました!そしてあなたを助けます

于 2012-09-26T14:41:43.810 に答える
2

Express のどのバージョンを使用していますか? https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.xをチェックするか、これを試してください:

var server = app.listen(8000);
var io = require('socket.io').listen(server);
于 2012-08-04T16:14:15.563 に答える
1

このアプローチは、現在の安定版リリース 0.8.14 で機能します。

var express = require('express')
  , app = express()
  , server = app.listen(8000)
  , io = require('socket.io').listen(server);
于 2012-11-01T04:22:45.650 に答える
1

この問題に遭遇した場合は、次を使用する必要があります。

var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
server.listen(8000);

as express は、socket.io が必要とする HTTP インスタンスを返さなくなりました。Express 2 および Express 3 の例については、https: //github.com/learnboost/socket.io で更新された README.md ファイルを参照してください。

于 2012-09-26T14:09:09.520 に答える
0

npm list socket.io を実行します

以下のように無効と表示されていないことを確認してください。

─ socket.io@0.9.10 無効

npm エラー! 無効: socket.io@0.9.10 c:\Users....

このエラーが発生した場合は、npm install socket.io. また、他のパッケージでも同様であることを確認してください。

于 2016-08-23T18:24:02.890 に答える