node.jsで使える便利なモジュールはたくさんあります。node-validatorもその1つで、入力した値の検証(バリデート)と、無害化(サニタイズ)してくれるモジュールです。前回と前々回でチャットに関しての記事を書きましたので、今回は簡単にnode-validatorの紹介と、チャットのサンプルにnode-validatorを適応させたいと思います。
https://github.com/chriso/node-validator
チャットでサニタイズしなかったらどうなるか。 前回と前々回の記事では、サニタイズをしていないので、例えばタグを入力してボタンを押して見ると、
html 1
2
3
<h1>こんにちは!</h1> <img src="http://0.gravatar.com/avatar/50dcad2670fb76d401e699e09101d87e?s=500" width="150"> <script>alert('ぼえー')</script> このようにタグがそのまま出たり、悪意あるJavaScriptを実行してしまって、cookieを書き換えられたり、同じページを開いている人にも悪い影響が出てしまう可能性があるので良くないです。これを防ぐ為に、サニタイズをします。
node-validatorのインストール方法 毎度おなじみnpmを使います。
$ npm install validator チャットにサニタイズを適応させる。 Mongooseを使わないバージョンで試してみたいと思います。前々回の【node.js】socket.ioを使って簡単にチャットを作る方法から持ってきます。
$ git clone https://github.com/cotapon/chat-socket_io-sample $ cd chat-socket_io-sample $ npm install validator node_modulesの中にvalidatorが入っているのを確認して、app.jsを編集します。
app.js 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
前回の【node.js】socket.ioを使って簡単にチャットを作る方法の続きです。今回はチャットした内容をデータベースに保存する方法です。こうすることによって、一回ブラウザを閉じて再度開いた時に閉じる前のメッセージが残っていたり、途中から参加した人も今までのメッセージが読めるようになります。いくら保存できるようになったとしても、製品レベルには程遠く、脆弱性対策もしていないので、今回は、node.jsでMongoDBを使うことと、MongoDB のオブジェクトモデリングツールであるMongoose(マングース)の使い方のポイントだけを抑えて頂ければと思います。
今回のポイント Mongooseをインストールして簡単な使い方。 チャットのメッセージを保存する。 ブラウザを閉じてもメッセージが残っている。 メッセージを削除する。 削除したメッセージは、相手にも削除されるようにする。 ※予めMongoDBが使える状態にしててください。
必要なnode_modules ejs express mongoose socket.io Mongooseのインストール インストールはいつものnpmでめっちゃ簡単にインストールできます。
$ npm install mongoose app.jsを編集 前回の【node.js】socket.ioを使って簡単にチャットを作る方法のソースからMongooseの追記だけをしたサンプルです。
app.js 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
※この記事の続きもよくご覧いただいてます。※
【Node.js】Socket.IO+MongoDBを使って保存できるチャットを作る方法
なんとかチャットを作ることができるようになりました。まだ仕組みの表面しか理解できてないかもしれませんが、入り口には立てたと思います。ただソースを落としてきて、「あー動いた。」でもいいんですが、僕は分からなくてもソースを書いていけば、そのうち理解できるかもという非効率な勉強法が好きなので、^-^; 同じ方がいらっしゃればお役に立てる内容になればと思います。
ソースコード https://github.com/cotapon/chat-socket_io-sample
環境 MacOS 10.6.8
ターミナル.app
node v0.6.11 or v0.8.4 ※
npm v1.1.45
express v2.5.11
socket.io v0.8.7
※node.jsのバージョンによっては、socket.ioが繋がらないなどの現象があります。今回はv0.6.11と、2012年7月31日現在の安定版、v0.8.4でも検証して成功しました。 node.jsのバージョンを確認 まず、node.jsのバージョンを確認しましょう。
$ node -v v0.6.11 もし、v0.6.x以下でしたら、うまくexpressとsocket.ioが繋がらない可能性がありますので、node.jsのバージョンを上げます。 参考にnvmという、node.jsのバージョン管理ツールで変更する方法をメモします。 nvmがインストールされていないかたは、こちらの記事を御覧ください。
//node.js v0.8.4をインストール $ nvm install v0.8.4 //インストールしたバージョンを使います。 $ nvm ues v0.8.4 Now using node v0.8.4 //ターミナルを閉じても使えるようにしておく $ nvm alias default v0.8.4 default -> v0.8.4 npmをインストールする。 ※既にnpmが入ってる方は、ここの項目は飛ばして下さい。
//npmをインストール $ curl http://npmjs.
node.jsはバージョンの違いで、expressやsocket.ioが使えなかったりします。またこれらのバージョンもしかりです。その度にnode.jsのバージョンの上げ下げを実行するのは手間がかかります。そこで、コマンド1つでnode.jsのバージョンを切り替えることができる、Node Version Managerのnvmというのを使います。さらにこのnvmが便利なのは、npm(Node Packege Manager)のパスも通るので、node.jsのバージョンを切り替えた後も楽です。今回は簡単にnvmのインストールの方法から、設定と使い方まで紹介します。
nvmをインストールする インストールにはgitを使います。
$ git clone git://github.com/creationix/nvm.git ~/.nvm git便利ですね。
nvmコマンドを使えるようにしておく $ source ~/.nvm/nvm.sh $ nvm version v0.8.4 この1行目を実行しておかないと、nvmコマンドが使えません。versionはv0.8.4がインストールされているのがわかりました。
node.jsのバージョンをインストールする $ nvm install v0.6.11 インストールには時間が多少かかるので待ちます。
$ nvm use v0.6.11 $ nvm alias default v0.6.11 $ node -v v0.6.11 node.jsのバージョンが切り替わりましたね。もう1つ、2012年7月31日時点での安定版、v0.8.4をインストールしてみましょう。
$ nvm install v0.8.4 //待ちます。 $ nvm use v0.8,4 $ nvm ls v0.6.11 v0.8.4 current: v0.8.4 default -> v0.6.11 lsを使うと、nvmでインストールされたバージョンの一覧が表示されます。currentは現在使っているバージョンです。defaultはそのままでデフォルトで使われるバージョンです。つまり、ターミナルを閉じたりログアウトすると、defaultのバージョンに戻ります。デフォルトで使うnode.jsのバージョンをv0.8.4にしてみましょう。
$ nvm alias default v0.
node.js勉強中です。先人の知恵さまのサイトを見る日々が続きます。色んなサンプルサイトで使われいているexpress。雛形を作成してくれる便利なフレームワークです。このexpressを使って雛形をインストールするわけですが、先人の知恵さまサイトではejsが使われてて、自分の環境では何をやっても絶対にjadeがインストールされてしまっていました。今回はなんでそれが起きたのかと、expressでejsがインストールされない方へ向けての対処法を書きます。
※2012/08/18追記 express version 3.xから、ejsの指定の方法が変わったようです。tamaさんにご教授頂きました。ありがとうございます!
express version 3.xでejsを指定する方法 version 2.xまでは、express -t ejsと指定する方法でしたが、version 3.x以降は、express -eでejsが指定されるみたいです。
//バージョンの確認。 $ express version 3.0.0rc3 //ejsを指定する。 $ express -e sample create : sample create : sample/package.json create : sample/app.js create : sample/public create : sample/public/javascripts create : sample/public/images create : sample/public/stylesheets create : sample/public/stylesheets/style.css create : sample/routes create : sample/routes/index.js create : sample/views create : sample/views/index.ejs install dependencies: $ cd sample && npm install run the app: $ node app ちゃんとejsがインストールされました!^▽^
tween.jsとは 四角いdiv要素をクリックしたら、びょんびょんびょーーーんっと、動いたと思います。早速これのサンプルコードはこちら。(jQueryで書いてます。)
js 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
(function(){ if(typeof jQuery == 'undefined')return; jQuery.
node.jsとjQueryを使ってスクレイピングできるとかできないとか。先人の知恵さまのブログを色々拝見させていただいてたら、jsdomというのを使ってDOMの操作ができ、スクレイピングができるみたいです。早速やってみましたら早速エラーが出ました笑
Error: Cannot find module 'jsdom/browser/domtohtml' どうやら、domtohtmlというライブラリのパスが違うみたいなので、しらべてみると、下記のパスで正しくつながるみたいです。
//これが間違い✕ domToHtml = require('jsdom/browser/domtohtml'); //これが正しいパス◯ domToHtml = require('jsdom/lib/jsdom/browser/domtohtml');