1
0

More than 3 years have passed since last update.

Node.js + Express サーバから、Docker(+Docker-Compose) + Redis サーバーにデータを送る・削除する

Last updated at Posted at 2020-02-12

Node.js サーバーから、Docker サーバにデータを送る

  • Ubuntuサーバー環境は2つ使ってます
    • マシンA
      • Node.js + Express + express-session + connect-redis + Redis
    • マシンB
      • Docker + Docker-Compose + Redis

マシンA から マシンB を参照してデータを表示したかったので、こんな構成になってます。
色々サイト見てたけど、実際にやってみないとコレわかんねーわって思った。

マシンAの下準備

色々インストールする

Ubuntu と Node.js は既に導入済を想定

必要なものをインストールする

$ mkdir exp_redis_test
$ cd exp_redis_test
$ npm install --save express \
                     express-session \
                     connect-redis \
                     redis

マシンBの下準備

前回作ってたので、それを使う

マシンBのRedis起動しておく

docker-compose up -d --build

マシンAで index.js を作る

node で実行するファイルを作成する

var と const と let が混じってるけど気にしない。

index.js
var express = require('express');
var app = express();
var session = require('express-session');
var RedisStore = require('connect-redis')(session);

const REDIS_HOST_NAME = '192.168.123.223';
const REDIS_PORT_NO = 6379;
var redis = require('redis');
let redisClient = redis.createClient(REDIS_PORT_NO, REDIS_HOST_NAME);

app.use(session({
    secret: 'secret',
    resave: false,
    saveUninitialized: true,
    store: new RedisStore({ client: redisClient }), // Redisの設定
    cookie: {
      path: '/',
      maxAge: 5 * 1000,
    }
}));

app.get('/', (req, res) => {
    // セッションデータが無ければランダム値を取得
    var begginer = req.session.value || Math.random();
    // valueという名前でセッションデータを生成
    req.session.value = begginer;
    res.send('Begginer value: ' + begginer);
});

app.get('/session-delete', function(req, res) {
  delete req.session.value;
  res.send('session variable deleted');
});

app.listen(3000, () => {
    console.log('Example app listening on port 3000!');
});

作ったら保存して起動する

$ node index.js
Example app listening on port 3000!

ブラウザで http://192.168.123.223:3000/ を起動すると、
数字は同じにはならないが、↓こんな感じになる
image.png

この状態のままで、マシンBを確認する

$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"

データが入力されてるのが確認できる。中身を見ると、

$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"
127.0.0.1:6379> get sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS
"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"value\":0.016689389693930634}"
127.0.0.1:6379>

こんな感じに、Valueが入力されているのが確認できる。
index.js を再確認したら、session-delete が出来るようにしてあるので、
http://192.168.123.223:3000/session-delete/ にアクセスしてみる。
↓こうなるので、またマシンBを確認する。
image.png

$ docker exec -it mysqltest_redis_1 bash
root@09a7f47d4784:/data# redis-cli
127.0.0.1:6379> keys *
1) "sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS"
127.0.0.1:6379> get sess:VKmVo2FPTXAlspqLyLHgENmEdHhzK_pS
"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"}}"
127.0.0.1:6379>

Valueが削除されているのが確認できる。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0