我正在研究一个在它创建的Redis数据库上运行良好的NodeJS应用程序。
同一个应用程序的旧版本使用的数据库信息稍少一些。
我的目标是通过对可能无效的查询引入错误处理,将我的新应用程序与旧数据库一起使用。
当我将我的开发应用程序切换到旧数据库的副本时,我收到以下错误:
/root/z-nomp/node_modules/redis/lib/utils.js:7
if (reply.length === 0 || !(reply instanceof Array)) {
^
TypeError: Cannot read property 'length' of undefined
at Object.replyToObject [as reply_to_object] (/root/z-nomp/node_modules/redis/lib/utils.js:7:15)
at RedisClient.handle_reply (/root/z-nomp/node_modules/redis/index.js:314:23)
at multi_callback (/root/z-nomp/node_modules/redis/lib/multi.js:79:43)
at Command.callback (/root/z-nomp/node_modules/redis/lib/multi.js:116:9)
at normal_reply (/root/z-nomp/node_modules/redis/index.js:721:21)
at RedisClient.return_reply (/root/z-nomp/node_modules/redis/index.js:819:9)
at JavascriptRedisParser.returnReply (/root/z-nomp/node_modules/redis/index.js:192:18)
at JavascriptRedisParser.execute (/root/z-nomp/node_modules/redis-parser/lib/parser.js:574:12)
at Socket.<anonymous> (/root/z-nomp/node_modules/redis/index.js:274:27)
at Socket.emit (events.js:160:13)
at addChunk (_stream_readable.js:269:12)
at readableAddChunk (_stream_readable.js:256:11)
at Socket.Readable.push (_stream_readable.js:213:10)
at TCP.onread (net.js:602:20)
发生此错误的库位于:https://github.com/NodeRedis/node_redis/blob/master/lib/utils.js
我是否需要在此模块中引入错误处理?
原始应用的代码是值得的:https://github.com/zone117x/node-open-mining-portal
我要求的代码在这里:https://github.com/z-classic/z-nomp
我应该注意这类情况是否存在一些常见的陷阱?
谢谢!
答案 0 :(得分:0)
这不是调试答案。正如评论中所述,我们需要代码才能进行评估。
但是根据您收到的错误,很明显“回复”#39;返回为undefined或null。我会假设你知道的那么多。
首先,您的代码必须检查这样的事情。你正在直接跳到长度(实际上,对于理解未定义,公牛,空字符串和对象之间差异的人来说,检查原因是非常糟糕的。)但是你似乎没有检查回复,它返回undefined。
关于你的整体节点 - redis婚姻,这很常见。在许多情况下通常都是一个非常好的主意。但是当你使用Redis时要小心监视你的吞吐量,如果像Socket.io这样的库一起使用,你将面临一系列需要克服的新问题。
以上所有内容只是我在火车上的快速浏览。因此,请原谅拼写错误和缺乏正确使用大胆评论等。
你真的需要评估你的变量,尤其是当你不知道他们是否会拥有任何东西时。在这种情况下,承诺回调等待所有人都是你的朋友。