Node.js + Express4 + Socket.io + SocketIO4Netで詰まったのでメモ
久々の投稿です。
最近は実装に論文に実験にとあたふたしてましたが、
昨日論文投稿したので少し余裕でました。
こんな感じの実験システムを作っていたわけですが。
①socket.ioのバージョンで詰んだ
Socket.IOがver0.9からver1.0になり、
SocketIO4Net(C#用のSocket.ioのクライアントライブラリ)の更新が
"This project will no longer be maintained."
(SocketIO4Net.Client - Home)
socket.io 0.9の時に終わってしまったため通信できなくなった様です。
なのでNode.jsのプロジェクトを作る時に、以下のコマンド"@"を使ったバージョン指定でのインストールを行わなければならない。
npm install socket.io@0.9
②Express4の使い方で詰んだ
以前までExpress3を使っていた(この頃はまだよくわからず使ってたが)ので、4にバージョンアップしてわからなくなった。
express4でexpress-generatorを使ってプロジェクトを作成すると以下の様なディレクトリになる。
MyExpressServer(プロジェクト名) -bin --www -node_modules --body-parser --cookie-parser --debug --ejs --express --morgan --serve-favicon --socket.io -public --images --javascripts --stylesheets -routes --index.js --users.js -views --index.ejs --error.ejs -package.json -app.js
これのやり方はこれの
Express - Moving to version 4
これ
$ npm install -g express $ npm install -g express-generator $ express -e MyExpressServer $ cd MyExpressServer && npm install $ npm install socket.io@0.9 //C#との連携じゃない場合は@0.9はいらない
詰まった所は、以前まではapp.jsの中に以下のコード(サーバを構築する処理)を書いていた。
//ポート設定 app.set('port', process.env.PORT || 3258); var server = http.Server(app); //appにsetしたport番号とhostのip adress, error時に呼び出される関数 server.listen(app.get('port'), "localhost", function (err) { if (err) throw err; console.log('Listening on ' + server.address().address + ':' + server.address().port); });
これはexpress4ではbin/wwwに記述する事になった様です。
app.jsでレンダリングするページのディレクトリやらなんやら設定して、wwwでそれを
var app = require('../app');
で読み込みます。
サーバを起動する際には、package.jsonの中にscriptが書かれいる"start"コマンドを使います。
つまり
npm start // node ./bin/wwwが実行される
と入力すればサーバが起動する。
③ejsのレンダリングでハマった
publicの中にあるjavascriptsやstylesheetsフォルダ、これを最初は以下の様にしていたんだけど。
public -main.js -class --myClass.js // 仮名 --etc... -lib --three.min.js --etc...
指定したページ(http://localhost:3000/)を開いても、
読み込んでくれるファイルと読み込まないファイルがある。
試しにjavascriptsとstylesheetsフォルダにディレクトリの階層構造を作らずファイルを入れたら正確に読み込んだ。
これに関しては原因がイマイチわかっていない。
今後暇があれば原因探してみる。
では以上。