Node-redis: TypeError:未定義のプロパティ「コールバック」を読み取れません

作成日 2019年04月04日  ·  4コメント  ·  ソース: NodeRedis/node-redis

エラーメッセージの詳細:
C:\Users\xxxxx\node_modules\redis\index.js:722 if (typeof command_obj.callback === 'function') { ^ TypeError: Cannot read property 'callback' of undefined at normal_reply (C:\Users\xxxxx\node_modules\redis\index.js:722:28) at RedisClient.return_reply (C:\Users\xxxxx\node_modules\redis\index.js:824:9) at JavascriptRedisParser.returnReply (C:\Users\xxxxx\node_modules\redis\index.js:192:18) at JavascriptRedisParser.execute (C:\Users\xxxxx\node_modules\redis-parser\lib\parser.js:574:12) at Socket.<anonymous> (C:\Users\xxxxx\node_modules\redis\index.js:274:27) at Socket.emit (events.js:189:13) at addChunk (_stream_readable.js:284:12) at readableAddChunk (_stream_readable.js:265:11) at Socket.Readable.push (_stream_readable.js:220:10) at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

redisクライアントのソースコード:
function normal_reply (self, reply) { var command_obj = self.command_queue.shift(); if (typeof command_obj.callback === 'function') { if (command_obj.command !== 'exec') { reply = self.handle_reply(reply, command_obj.command, command_obj.buffer_args); } command_obj.callback(null, reply); } else { debug('No callback for reply'); } }
このエラーは、常にではなく、時々発生します。 おそらくバグがあると思うので、コマンドキューからシフトするときにcommand_objをチェックする必要があります。

pending-author-input

最も参考になるコメント

また、このエラーが断続的に発生します。 私の場合、「client.punsubcribe()」を呼び出した後、プロセスを再開するまで、これらのエラーが殺到することがあるようです。

編集:ノードインスタンスごとに通常4つの同時Redisクライアントがあり、2つから2つの異なるホストがあることも追加する必要があります

  • "redis": "2.8.0"
  • ノード10
  • "redis-parser": "2.6.0"

トレースバックはOPとほぼ同じですが、完全を期すために次のようにします。

TypeError: Cannot read property 'callback' of undefined
    at normal_reply (/snapshot/stream-node/node_modules/redis/index.js:722:28)
    at RedisClient.return_reply (/snapshot/stream-node/node_modules/redis/index.js:824:9)
    at JavascriptRedisParser.returnReply (/snapshot/stream-node/node_modules/redis/index.js:192:18)
    at JavascriptRedisParser.execute (/snapshot/stream-node/node_modules/redis-parser/lib/parser.js:574:12)
    at Socket.<anonymous> (/snapshot/stream-node/node_modules/redis/index.js:274:27)
    at Socket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:287:12)
    at readableAddChunk (_stream_readable.js:268:11)
    at Socket.Readable.push (_stream_readable.js:223:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

全てのコメント4件

このコードはありますか?

const redis = require('redis');
require('bluebird').promisifyAll(redis);

これをデバッグするのは非常に困難です。 それは実際には決して起こらないはずです。 これは、状態がもう正しくないことを示しています。 このエラーを確実にトリガーできる方法はありますか?また、私に詳しい情報がありますか? 切り取られた最小限のコードのように、node_redisバージョンとパーサーバージョン、使用するコマンド、およびこれをデバッグするのに役立つ可能性のあるその他のもの。

また、このエラーが断続的に発生します。 私の場合、「client.punsubcribe()」を呼び出した後、プロセスを再開するまで、これらのエラーが殺到することがあるようです。

編集:ノードインスタンスごとに通常4つの同時Redisクライアントがあり、2つから2つの異なるホストがあることも追加する必要があります

  • "redis": "2.8.0"
  • ノード10
  • "redis-parser": "2.6.0"

トレースバックはOPとほぼ同じですが、完全を期すために次のようにします。

TypeError: Cannot read property 'callback' of undefined
    at normal_reply (/snapshot/stream-node/node_modules/redis/index.js:722:28)
    at RedisClient.return_reply (/snapshot/stream-node/node_modules/redis/index.js:824:9)
    at JavascriptRedisParser.returnReply (/snapshot/stream-node/node_modules/redis/index.js:192:18)
    at JavascriptRedisParser.execute (/snapshot/stream-node/node_modules/redis-parser/lib/parser.js:574:12)
    at Socket.<anonymous> (/snapshot/stream-node/node_modules/redis/index.js:274:27)
    at Socket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:287:12)
    at readableAddChunk (_stream_readable.js:268:11)
    at Socket.Readable.push (_stream_readable.js:223:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)

デバッグモードで実行した後、これらのエラーがconnection gone from close eventメッセージで追跡されることに気付きました(redisサーバーからの通常のアイドルプロセスの終了中に表示されるより一般的なconnection gone from end eventとは対照的です)

また、断続的に発生し、アプリサーバーにcronジョブからの負荷が著しく高い場合にのみ発生します。

redis 3.0.2ノード14.15.1、redis-parser 3

TypeError: Cannot read property 'callback' of undefined
    at normal_reply (/app/node_modules/redis/index.js:650:28)
    at RedisClient.return_reply (/app/node_modules/redis/index.js:752:9)
    at JavascriptRedisParser.returnReply (/app/node_modules/redis/index.js:137:18)
    at JavascriptRedisParser.execute (/app/node_modules/redis-parser/lib/parser.js:544:14)
    at Socket.<anonymous> (/app/node_modules/redis/index.js:218:27)
    at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
    at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
    at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
    at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
    at Socket.emit (events.js:315:20)
    at addChunk (_stream_readable.js:309:12)
    at readableAddChunk (_stream_readable.js:284:9)
    at Socket.Readable.push (_stream_readable.js:223:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
    at TCP.callbackTrampoline (internal/async_hooks.js:129:14)

また、キャッチされたためにサーバーをクラッシュさせない、ほぼ同時に関連するAbortErrorsがあります

AbortError: Redis connection lost and command aborted. It might have been processed.
    at RedisClient.flush_and_error (/app/node_modules/redis/index.js:297:23)
    at RedisClient.connection_gone (/app/node_modules/redis/index.js:602:14)
    at Socket.<anonymous> (/app/node_modules/redis/index.js:226:14)
    at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
    at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
    at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
    at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
    at Object.onceWrapper (events.js:422:26)
    at Socket.emit (events.js:315:20)
    at TCP.<anonymous> (net.js:673:12)
    at TCP.callbackTrampoline (internal/async_hooks.js:129:14)
    at new Command (/app/node_modules/redis/lib/command.js:12:22)
    at RedisClient.info (/app/node_modules/redis/lib/individualCommands.js:169:39)
    at RedisClient.ready_check (/app/node_modules/redis/index.js:469:10)
    at RedisClient.on_connect (/app/node_modules/redis/index.js:363:14)
    at Socket.<anonymous> (/app/node_modules/redis/index.js:212:14)
    at /app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:54:19
    at Scope._activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/async_hooks.js:53:14)
    at Scope.activate (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:12:19)
    at Socket.bound (/app/node_modules/dd-trace/packages/dd-trace/src/scope/base.js:53:20)
    at Object.onceWrapper (events.js:421:28)
    at Socket.emit (events.js:327:22)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1132:10)
    at TCPConnectWrap.callbackTrampoline (internal/async_hooks.js:129:14)
{
    code: 'UNCERTAIN_STATE',
    command: 'INFO'
}
このページは役に立ちましたか?
0 / 5 - 0 評価