投稿

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 ♥ ScotchMigrating from 3.x to 4.x · visionmedia/express Wiki · GitHub4.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
  GA.trackPage(req.url, req);  // Continue
  next(…

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.01.MySQL Community Editionの限界Node.js + node-mysqlからMySQLにクエリを投げると、その分だけスレッドが立つ(1つのコネクションに対して1つのスレッド)。デフォルトの設定では、すぐ「too many connections」とエラーになってしまうので、my.cnfに「max_connections」を設定する。しかし、コネクション数が256を超えた辺りで、レスポンスが非常に悪くなるらしい。公式サイトにコネクション数とパフォーマンスのグラフがある。MySQL :: MySQL Enterprise Scalabilitymy.cnfの「thread_handling=pool-of-threads」としたいけど、これはMySQL Enterprise版の機能らしい。調べてみると、MySQLからフォークした「MariaDB」というのがMySQL互換でスレッドプールも備えているので試してみた。2.MariaDBについて下記サイトが詳しい。MariaDB - WikipediaMySQLとMariaDBの違い一覧 - The Programmer’s Guide to the Parallel World3.MariaDB 5.5をCentOSにインストール(失敗)※この章は失敗したログ。成功した方法は次の章で。まずは既存データベースのバックアップ
# mysqldump -p hogedb > hogedb_20140310.sqlMySQLサーバーは停止。
# /etc/rc.d/init.d/mysqld stop
公式サイトを参考にYUMのリポジトリを追加する。MariaDB - Setting up MariaDB RepositoriesInstalling MariaDB with yum - MariaDB Knowledgebase# vi /etc/yum.repos.d/MariaDB.repo# Mar…

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

イメージ
Nodejsのセッション管理の仕組みをどうするか迷っていたときの覚書。環境: CentOS 5.10 x86_64すでにMySQLが導入済みなのでconnect-mysql-sessionMySQL-Clusterにするか迷ったけど、調査した結果Redisを使うことに決定。理由connect-mysql-sessionは最近メンテナンスされてない。 MySQL-Clusterの最新版を導入するために既存のMySQLが影響受けそう。 セッション管理のモジュールでconnect-redisが人気
Popular sessions modules - Node.JS Modules参考:visionmedia/connect-redis  | GitHubA 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 on2.connect-redisのインストール# npm install connect-redis --save3.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,
  secret: C.cookieSecret,
  store: new RedisStore()
}));
app.use(express.compr…

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" value="<?php if (!empty($_POST['pas…