Skip to content

Instantly share code, notes, and snippets.

@tokunami
Last active August 29, 2015 14:00
Show Gist options
  • Save tokunami/11207555 to your computer and use it in GitHub Desktop.
Save tokunami/11207555 to your computer and use it in GitHub Desktop.

Node.js+Expressでテキストチャット

プロジェクトを作成(プロジェクト名 chat1)、ディレクトリに移動

  $ mkdir chat1
  $ cd chat1

Express(Ver 2.5.11)をインストール

  $ sudo npm install -g [email protected]
  password

  $ express -v
  2.5.11

※sudoをつけること。

Expressを使ってファイル生成(生成するディレクトリ名 chat)

  $ express install -t ejs chat

たくさんできた。

   create : chat
   create : chat/package.json
   create : chat/app.js
   create : chat/public
   create : chat/public/javascripts
   create : chat/public/stylesheets
   create : chat/public/stylesheets/style.css
   create : chat/public/images
   create : chat/routes
   create : chat/routes/index.js
   create : chat/views
   create : chat/views/layout.ejs
   create : chat/views/index.ejs

chatディレクトリに移動し、npm installコマンド実行

  $ cd chat
  $ npm install

Socket.io(ver 0.8.7)をインストール

  $ npm install [email protected]

node_modules >socket.io というディレクトリができてたらOK

app.jsの編集 場所 chat1 > chat > app.js

    /**
     * Module dependencies.
     */
      
    var express = require('express')
      , routes = require('./routes');
      
    var app = module.exports = express.createServer();
      
    // Configuration
      
    app.configure(function(){
      app.set('views', __dirname + '/views');
      app.set('view engine', 'ejs');
      app.use(express.bodyParser());
      app.use(express.methodOverride());
      app.use(app.router);
      app.use(express.static(__dirname + '/public'));
    });
      
    app.configure('development', function(){
      app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    });
      
    app.configure('production', function(){
      app.use(express.errorHandler());
    });
      
    // Routes
      
    app.get('/', routes.index);
      
    app.listen(3000, function(){
      console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
    });
      
    //※ここから追記
    //socket
      
    var io = require('socket.io').listen(app);
    io.sockets.on('connection', function (socket) {
        //クライアント側からのイベントを受け取る。
        socket.on('msg send', function (msg) {
            //イベントを実行した方に実行する
            socket.emit('msg push', msg);   
            //イベントを実行した方以外に実行する
            socket.broadcast.emit('msg push', msg);
        });
        //接続が解除された時に実行する
        socket.on('disconnect', function() {
            log('disconnected');
        });
    });

ここから追記以降を追記

chat.jsファイルを新規作成 場所 chat1 > chat > public > javascripts > chat.js

    $(function() {
        var socket = io.connect('http://localhost');
        socket.on('connect', function() {
            console.log('connected');
        });
            
        $('#btn').click(function() {
            var message = $('#message');
            console.log(message);
            //サーバーにメッセージを引数にイベントを実行する
            socket.emit('msg send', message.val());
        });
        
        //サーバーが受け取ったメッセージを返して実行する
        socket.on('msg push', function (msg) {
            console.log(msg);
            var date = new Date();
            $('#list').prepend($('<dt>' + date + '</dt><dd>' + msg + '</dd>'));
        });
            
        socket.on('msg updateDB', function(msg){
            console.log(msg);
        });
    });

layout.ejsを編集 場所 chat1 > chat > views > layout.ejs

    <!DOCTYPE html>
    <html>
      <head>
        <title><%= title %></title>
        <link rel='stylesheet' href='/stylesheets/style.css' />
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script type="text/javascript" src="/socket.io/socket.io.js"></script>
        <script type="text/javascript" src="/javascripts/chat.js"></script>
      </head>
      <body>
        <input type="text" name="message" id="message" />
        <button id="btn">送信</button>
        <dl id="list"></dl>
      </body>
    </html>

※ソースコードでは、"chat.js"が"sample.js"となっており、そのまま書いたためにプログラムが動かなかった。 ここには上で作った"chat.js"が入る。

サーバー起動

  $ node app.js

http://localhost:3000でチャットができることを確認。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment