Socket.ioを使用して簡単なチャットアプリケーションを作成する方法に関するチュートリアル( http://socket.io/get-started/chat/ )に従っています。
しかし、Expressを使用して作成しようとしましたが、なぜポート3000がすでに使用されているのか疑問に思っていました。以下のコードは、ポート番号を変更しない限り機能しません。
/* Make the http server listen on port 3000. */
http.listen(3000, function(){
console.log('listening on *:3000');
});
Expressは、ポートを使用してルーティングなどのその他のことを行いますか?そのポートで何が起こっているのかを見つける簡単な方法はありますか?
私は必要なもので何か危険なことをしているかもしれません:
var express = require('express');
var app = require('express')();
var http = require('http').Server(app);
var router = express.Router();
var io = require('socket.io')(http);
ありがとう。
私もこの問題に遭遇し、これで解決しました:
使ってはいけません npm start
Webアプリを起動します
使用する node app.js
代わりに
実行してみてください:
netstat -anp tcp | grep 3000
これにより、ポート3000を使用しているプロセスの名前が表示されるはずです。StackOverflowの 別の問題 は、この問題をより詳細にカバーしています。
以前に ntop をインストールしていた(忘れていた)ため、デフォルトでポート3000も使用されるため、ここで説明したのと同じエラーが発生していました。
他の人が述べたように、netstatまたはlsofを使用して問題のあるサービスを見つけます(コマンドの前にSudoを付けて、正しいプロセス名を取得します)。
Sudo lsof -P | grep ':3000'
-または-
Sudo netstat -anp tcp | grep 3000
Ubuntuでは、サービスは(単純に)無効になっています。
service ntop stop
npm start
を使用しないという上記の回答に似ています。
Nodemonを使用し、expressjsとexpressjsジェネレーターを使用していました。 nodemonを使用してnpm start
を実行していましたが、npm start自体はnode ./NodeApp/bin/www
を実行します
したがって、nodemonがnode ./NodeApp/bin/www
を単独で実行するように編集すると、そのエラーは消えます。
結論
前
package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node ./NodeApp/bin/www",
"build": "webpack --watch",
"dev": "nodemon --exec npm start"
},
後
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --watch",
"dev": "nodemon --exec node ./NodeApp/bin/www"
},
そのため、サーバーをnpm run dev
で実行し、エラーはもうありません。
これを行うエクスプレスアプリで同じ問題を解決しました。
行を見つけます:
var port = normalizePort(process.env.PORT || '3000');
次のように置き換えます:
var port = normalizePort( 'XXXX');
xXXXは使用するポート番号です
その後、自由にnpm start! xD
私はこれで解決しました:
npm install shelljs
リッスンポートを開始する前に、nodejsプロセスを強制終了するためのコードを追加します
var Shell = require('shelljs');
Shell.exec("pkill nodejs");
Shell.exec("pkill node");
/* Make the http server listen on port 3000. */
http.listen(3000, function(){
console.log('listening on *:3000');
});
私にとっては_3000 || 3333
、そしてそれは問題を修正しています