わけちチャット(笑)

お勉強がてら比較的新しい技術を使ってチャットアプリを作りました。

  • 時々、@waketi が口を挟んできます。
  • 必ず返事が欲しい時は「わけち」と呼びかけてみてください(それでも返事できないときはありますが…)。
  • あなたのお名前部分にはあなたにあった色のテキストにしておきますね
  • インターネットに悪い人はいないのであなたになりすます人が現れることはありません(笑)
  • インターネットに悪い人はいないので機密情報を書いても問題ありません(笑)

わけちチャット(笑)

URLを見た時点でport 3000なのがダサいですが、今後の課題ということで…。

停止します。ありがとうございました!(2013/02)

他に動かしたいものがでてきたので、一旦停止します。

記念スクショのため賑やかにしてもらいましたw ありがとうございます。

どう作ったか?

munodeさんのNodeで作る人工無能をベースに作りました。
分かりやすくまとまっているし、面白い!

人工無能部分

人工無能部分はすでに @waketi でやっているので、@waketi にHTTPサーバを用意(サーブレットをたてるのは大げさかなと思ったのでcom.sun.net.httpserverにした)しREST APIを用意し、Nodeからそれを呼び出すようにしました。

Node、JSからどうやってHTTP通信するのやら、と疑問に思いましたが、HTTPのモジュールがあるんですね。
localhost:12345にPOSTでパラメータqを送ってます。

 var http = require('http');
	var options = {
		host: 'localhost',
		port: 12345,
		path: '/',
		method: 'POST'
	};
	var req = http.request(options, function(res) {
                // response処理
	};
        req.write('q='+msg+'\n');
        req.end();
}

DB

mongooseを使ってMongoDBにアクセスしています。
mongooseはORM風にmongoを使えるライブラリです。
message DBのmessageテーブルのDAOを作成しています。

// message.js
// message model
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/message',
		function(err) {
			if (err) {
				console.log(err);
			} else {
				console.log('connection success!');
			}
		}
		);
var Schema = mongoose.Schema;

var MessageSchema  = new Schema({
	name: String,
	message: String,
	created_at: Date
});
MessageSchema.pre('save', function(next) {
	console.log("pre save");
	if (this.isNew) {
		this.created_at = new Date();
	}
	next();
});
// define model
mongoose.model('Message', MessageSchema);
module.exports = db.model('Message');

はまったのは、messageテーブルを作ったつもりが、作成されるテーブル名は messagesになること。
※何だか勘違いをしている気もします(knifeモデルをつくるとknivesになるの?)
上記のコードで作られるテーブルはmongoのコンソールから以下のように確認できます。

mongo
> show dbs
admin	(empty)
local	(empty)
message	0.0625GB
> use message;
switched to db message
> show collections;
messages
system.indexes

新しい順に最新、150件を取るのはこんな感じ。

var Message = require('./lib/model/message.js');
msgs = Message.find().sort({created_at:-1}).limit(150).exec(function(err, msgs) {
    // msgs 処理
}

設計からやり直した方が良いレベルの糞コードはこちら