質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

受付中

Radis+expressをsession利用でエラーに。。

kumakake
kumakake

総合スコア42

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

0回答

0リアクション

0クリップ

524閲覧

投稿2021/12/22 17:06

Rediをセッションストアに利用しようとしてサンプルを参照に下記のようなソースを作成しました。

nodejs

const express = require('express') require('express-async-errors'); const cookieParser = require('cookie-parser') const session = require('express-session') const redis = require('redis') const app = express() const RedisStore = require('connect-redis')(session) const redisClient = redis.createClient() app.use(cookieParser()) app.use(session({ secret: 'secret_key', resave: false, saveUninitialized: false, store: new RedisStore({ client: redisClient }), cookie: { httpOnly: true, secure: false, maxage: 1000 * 60 * 30 } })) app.get('/', (req, res) => { if (req.session.views) { req.session.views++ } else { req.session.views = 1 } res.json({ 'sessionID': req.sessionID, 'req.session.views': req.session.views }) }) app.listen(3001, () => console.log('Example app listening on port 3001!'))

docker-compose.ymlの内容
% cat docker-compose.yml
version: '3'

services:
redis:
image: "redis:latest"
ports:
- "6379:6379"
volumes:
- "./data/reis:/data"

1)dockerを起動します。
% docker-compose up -d
2)アプリを起動します。
% node app.js
と実行すると、下記のエラーが表示されます。

% node app.js
Example app listening on port 3001!
(node:34971) UnhandledPromiseRejectionWarning: Error: The client is closed
at Commander._RedisClient_sendCommand (/Users/hoge/redistest/node_modules/@node-redis/client/dist/lib/client/index.js:393:31)
at Commander.commandsExecutor (/Users/hoge/redistest/node_modules/@node-redis/client/dist/lib/client/index.js:160:154)
at Commander.BaseClass.<computed> [as get] (/Users/hoge/redistest/node_modules/@node-redis/client/dist/lib/commander.js:8:29)
at RedisStore.get (/Users/hoge/redistest/node_modules/connect-redis/lib/connect-redis.js:33:19)
at session (/Users/hoge/redistest/node_modules/express-session/index.js:485:11)
at newFn (/Users/hoge/redistest/node_modules/express-async-errors/index.js:16:20)
at Layer.handle [as handle_request] (/Users/hoge/redistest/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/Users/hoge/redistest/node_modules/express/lib/router/index.js:323:13)
at /Users/hoge/redistest/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/Users/hoge/redistest/node_modules/express/lib/router/index.js:341:12)
(Use node --trace-warnings ... to show where the warning was created)
(node:34971) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:34971) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

try cacheでも引っ掛けることが出ず、原因がつかめません。
何が問題なのかご教授いただけませんか?

よろしくお願いします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

hoshi-takanori

2021/12/23 00:00

とりあえず redisClient.on('error', 〜) でエラーを表示してみては。
kumakake

2021/12/23 10:03

ありがとうございます! 下記のように追加してみました。 const redisClient = redis.createClient(); console.dir( redisClient ); redisClient.on( "error", function( err ) { console.log( '****redis error****' ); console.dir( err ); }); redisClient.on( "ready", function() { console.log( '****redis ready****' ); }); 結果として、エラーもreadyも表示しませんでした。 console.dir( redisClient )とやってみたところ、 <ref *1> Commander { _events: [Object: null prototype] {}, _eventsCount: 0, _maxListeners: undefined, select: [AsyncFunction: SELECT], subscribe: [Function: SUBSCRIBE], pSubscribe: [Function: PSUBSCRIBE], unsubscribe: [Function: UNSUBSCRIBE], pUnsubscribe: [Function: PUNSUBSCRIBE], quit: [Function: QUIT], json: { self: [Circular *1] }, ft: { self: [Circular *1] }, [Symbol(kCapture)]: false とonがない? 設定が間違えているのでしょうか?

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。