node.js の express フレームワークの作り方めも。

2012.10.11 HTML5/JavaScript 

node.js の express フレームワークの作り方。絶対忘れるのでめも。
自分は.ejsが初心者用と判断したので.ejs使ってつくる。

1年前くらいにもちょろっとnode.js触ったんだけど、その時はさくらVPSとか契約してなくて
ローカルでしかできなかったんだけど、よやく借りた鯖に入れてやってみた。
というか先輩のソースをごそっとパクってお借りしつつ、鯖側部分は想像で書きつつなんとか動かしてみた。

というわけでその部分はもちろん書けないけど、自分用の超簡単なsocketつないでごにょごにょみたいなことは分かったので、とりあえずフレームワークのテンプレ作るときメモ。

$ express -t ejs SampleApp

で SampleApp ディレクトリができて、その中にフレームワークができてる。
この中の app.js のポートを開放しているものに変更。
あとは/views/以下に index.ejs とかでテンプレファイル作れる。
ついでにソケットも作っておく。最後の行を変更して、とりあえずdefault用として使う。

謎の /socket.io/socket.io.js 404 Error
http.createServer(app).listenをsocket.ioに渡してやらないと
“NetworkError: 404 Not Found /socket.io/socket.io.js
GET /socket.io/socket.io.js 404 のError出る。

他のblogのサンプルとかで上記みたいなエラー出る場合はこれでいけるはず。
てかどこ間違ってるんだろ??

var server = http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});
var io = require('socket.io').listen(server);
// var io = require('socket.io').listen(app); ←これだとエラる。。
/**
 * Module dependencies.
 */

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

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 自分の開いたポート番号に変更 );
  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);
app.get('/users', user.list);

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

// ソケットを作る
var io = require('socket.io').listen(server);

// クライアントが接続してきたときの処理
io.sockets.on('connection', function(socket) {
  console.log("connection");
  // メッセージを受けたときの処理
  socket.on('message', function(data) {
    // つながっているクライアント全員に送信
    console.log("message");
    io.sockets.emit('message', { value: data.value });
  });

  socket.on('pc', function(data) {
    // つながっているクライアント全員に送信
    console.log("pc");
    io.sockets.emit('secret', 1234);
  });  
  socket.on('mob', function(data) {
    io.sockets.emit('mobile', {hoge:'***'});
  });
 
  // クライアントが切断したときの処理
  socket.on('disconnect', function(){
    console.log("disconnect");
  });
});

これで一応起動できる。

$ node-dev app.js

これアプリ作る度にnode_modulesいろいろインストールしないとダメなのかな。。?
あと毎回port番号分けて行くのめんどくさいんだけどみんなどしてるんだろ。本番用はport設定どうすればいいんだろ?鯖のhomeに色々インストールして使ってるのでごちゃごちゃして嫌なんだけど、こいう時の綺麗な管理方法というか鯖構成みたいなの知りたいなぁ。

みたいな、やってみていろいろ疑問点出てきたので
もうちょっと理解できたら偉い人たちに聞いてみる。:)

諸々実行されるタイミングとか、expressの使い方とか全然分かってないからいろいろもどかしい。
けど夢がワクワクしてきて楽しい。(謎

めもめも。

you

© rettuce.com