投稿

3月, 2014の投稿を表示しています

[Node.js]ExpressJS 3.xから4.xにUpdate

イメージ
connect-redis を1.5にアップデートしたらエラーで動かない。。。 express 4.0にする必要があったので3.xで作成したアプリを4.xに移行したときの覚書。 環境: node.js v0.10.26, express v4.0.0-rc3 参考サイト ExpressJS 4.0: New Features and Upgrading from 3.0 ♥ Scotch Migrating from 3.x to 4.x · visionmedia/express Wiki · GitHub 4.0からはconnectが削除されるので、付随していたミドルウェアを自前で読み込まなければならない。 例を見るのが分かりやすい。 express 3.xの記述例 var express = require('express'); var app = express(); var RedisStore = require('connect-redis')(express); var C = require('./config'); var GA = require('./lib/google-analytics'); var system = require('./routes/system'); // Load Module app.use(express.urlencoded()); app.use(express.json()); app.use(express.cookieParser(C.cookieSecret)); app.use(express.session({   key: C.cookieKey,   secret: C.cookieSecret,   store: new RedisStore({     db: C.db.session.database   }) })); app.use(express.compress()); // Use gzip app.use(app.router); app.all('*', function(req, res, next) {   // Tracking   G

Node.js環境のためにMySQLからMariaDBに移行

イメージ
Android, iOSアプリからのアクセスをNode.jsで実装したけれど、データベース(MySQL)がたまに応答しなくなる現象が発生したので調査したときの覚書。 環境:CentOS 5.10 x86_64, MySQL 5.5.36, Node.js v0.10.26, node-mysql 2.1.0   1.MySQL Community Editionの限界 Node.js + node-mysql からMySQLにクエリを投げると、その分だけスレッドが立つ(1つのコネクションに対して1つのスレッド)。 デフォルトの設定では、すぐ「too many connections」とエラーになってしまうので、my.cnfに「max_connections」を設定する。 しかし、コネクション数が256を超えた辺りで、レスポンスが非常に悪くなるらしい。公式サイトにコネクション数とパフォーマンスのグラフがある。 MySQL :: MySQL Enterprise Scalability my.cnfの「thread_handling=pool-of-threads」としたいけど、これはMySQL Enterprise版の機能らしい。 調べてみると、MySQLからフォークした「MariaDB」というのがMySQL互換でスレッドプールも備えているので試してみた。   2.MariaDBについて 下記サイトが詳しい。 MariaDB - Wikipedia MySQLとMariaDBの違い一覧 - The Programmer’s Guide to the Parallel World   3.MariaDB 5.5をCentOSにインストール(失敗) ※この章は失敗したログ。成功した方法は次の章で 。 まずは既存データベースのバックアップ # mysqldump -p hogedb > hogedb_20140310.sql MySQLサーバーは停止。 # /etc/rc.d/init.d/mysqld stop 公式サイトを参考にYUMのリポジトリを追加する。 MariaDB - Setting up MariaDB Repositories Installing MariaDB with yum -

RedisをInstallして、Node.js + RedisでSession管理

イメージ
Nodejsのセッション管理の仕組みをどうするか迷っていたときの覚書。 環境: CentOS 5.10 x86_64 すでにMySQLが導入済みなので connect-mysql-session か MySQL-Cluster にするか迷ったけど、調査した結果Redisを使うことに決定。 理由 connect-mysql-session は最近メンテナンスされてない。 MySQL-Cluster の最新版を導入するために既存のMySQLが影響受けそう。 セッション管理のモジュールでconnect-redisが人気 Popular sessions modules - Node.JS Modules   参考: visionmedia/connect-redis  | GitHub A Node in Nodes - connect-redisでセッション管理   1.Redisのインストール Redisについては下記記事が分かりやすい。 インメモリKVS「Redis」を試してみる -導入編- | ビズリーチラボ REMIリポジトリがインストールされているなら、最新版をYUM経由で取得できる。 # yum install redis --enablerepo=remi 起動。自動起動も設定。 # /etc/rc.d/init.d/redis start # chkconfig redis on   2.connect-redisのインストール # npm install connect-redis --save   3.Node.js + Expressの環境に導入 var express = require('express'); var app = express(); var RedisStore = require('connect-redis')(express) app.use(express.urlencoded()); app.use(express.json()); app.use(express.cookieParser(C.cookieSecret)); app.use(express.session({   key:C.cookieKey,  

SSL + IE11の環境でtype="password"の値が取得できない

イメージ
会員登録の画面でユーザーから「登録できない」と問合せがあったので調べたときの覚書。 <会員登録処理の流れ> ユーザー名、パスワード、パスワード確認を入力 ↓ POST ↓ プレビュー画面 ※このときPOSTされた値はdisplay:noneで隠してある。 ↓ POST ↓ 登録   調べてみるとプレビュー画面からPOSTする際に確認用パスワードの値を取得出来ていない。 IE11のバグとして上がっているみたい。 IE 11 second password input not showing as being populated for SSL page with Autocomplete for passwords enabled | Microsoft Connect   この現象の確認と対策用に作成したスクリプトはこちら <html> <head>     <script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>     <title>POSTテスト</title>     <style>         .hide {display: none;}     </style> </head> <body>     <?php var_dump($_POST);?>     <form id="submit-form" method="post">         <div class="frame <?php if (!empty($_POST)) echo 'hide';?>">             <input type="text" name="test" value=""/>             <input type="password" name="pass" valu