Angularjs 响应状态为零的Express Redis会话崩溃

Angularjs 响应状态为零的Express Redis会话崩溃,angularjs,node.js,session,express,redis,Angularjs,Node.js,Session,Express,Redis,我目前在使用Redis作为NodeJS Express应用程序的会话存储时遇到一些问题。在某个时刻,当我的应用程序等待mongoDB promise响应查询时,Redis会话突然使整个应用程序崩溃 堆栈跟踪: \u http\u server.js:192 抛出新的RangeError(`无效的状态代码:${statusCode}`); ^ RangeError:无效的状态代码:0 在ServerResponse.writeHead(_http_server.js:192:11) 在Server

我目前在使用Redis作为NodeJS Express应用程序的会话存储时遇到一些问题。在某个时刻,当我的应用程序等待mongoDB promise响应查询时,Redis会话突然使整个应用程序崩溃

堆栈跟踪:
\u http\u server.js:192
抛出新的RangeError(`无效的状态代码:${statusCode}`);
^
RangeError:无效的状态代码:0
在ServerResponse.writeHead(_http_server.js:192:11)
在ServerResponse.writeHead(/my\u project\u path/node\u modules/on headers/index.js:55:19)
在ServerResponse.writeHead(/my\u project\u path/node\u modules/on headers/index.js:55:19)
在ServerResponse.writeHead(/my\u project\u path/node\u modules/on headers/index.js:55:19)
在ServerResponse._implicitHeader(_http_server.js:157:8)
在ServerResponse.end(/my\u project\u path/node\u modules/compression/index.js:102:14)
写入时(/my\u project\u path/node\u modules/express session/index.js:261:22)
在Command.ontouch(/my\u project\u path/node\u modules/express session/index.js:348:11)
在Command.callback(/my_project_path/node_modules/connect redis/lib/connect redis.js:248:10)
在正常回复时(/my\u project\u path/node\u modules/redis/index.js:721:21)
在RedisClient.return\u reply(/my\u project\u path/node\u modules/redis/index.js:819:9)
在JavascriptRedisParser.returnReply(/my_project_path/node_modules/redis/index.js:192:18)
在JavascriptRedisParser.execute(/my_project_path/node_modules/redis parser/lib/parser.js:574:12)
在插座上。(/my_project_path/node_modules/redis/index.js:274:27)
在emitOne(events.js:96:13)
在Socket.emit(events.js:188:7)
在readableAddChunk(_stream_readable.js:176:18)
在Socket.Readable.push(_stream_Readable.js:134:10)
在TCP.onread(net.js:547:20)
我已经尝试了很多方法来拦截错误,但都没有成功:它发生在我尝试的任何hook或console.log中。我试着搜索google和stackOverflow,但我能找到的只是一些人在自己的代码中错误地发送了零状态,而expressredis会话没有任何错误

快速配置代码 下面是我用来连接Express和Redis的代码:

const config={…此处配置数据…}
const session=require('express-session');//版本1.15.3
const redis=require('redis');//版本2.7.1,
const redistore=require('connect-redis')(会话);//版本3.3.0
const redisClient=redis.createClient({
主机:config.redisCache.host,
端口:config.redisCache.port,
验证过程:config.redisCache.token
});
redisClient.on(“错误”,函数(错误){
//这从来没有被称为
console.error(“Redis error”+JSON.stringify(err,null,2));
});
常数sess={
resave:false,//如果未修改,则不保存会话
saveUninitialized:true,//在存储某些内容之前不要创建会话,
机密:config.secrets.session,
存储区:新的RedisStore({client:redisClient}),
日志错误:函数(\u err){
//这也从来没有被称为
console.error('会话错误:'+JSON.stringify(_err,null,2))
}
};
应用程序使用(会话(sess));
请求的数据 下面是我发送的两个请求。其中一个来自我的客户端AngularJS应用程序,导致服务器崩溃。另一个收到了一个很好的回复,以弥补我的困惑

//AngularJS请求-使用上述堆栈跟踪使服务器崩溃
{
“主机”:“本地主机:8082”,
“连接”:“保持活动状态”,
“内容长度”:“54”,
“来源”:http://localhost:8082",
“用户代理”:“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_11_6)AppleWebKit/537.36(KHTML,如Gecko)Chrome/59.0.3071.115 Safari/537.36”,
“内容类型”:“应用程序/json;字符集=UTF-8”,
“接受”:“application/json,text/plain,*/*”,
“应用令牌”:“我的项目应用令牌”,
“推荐人”:http://localhost:8082/",
“接受编码”:“gzip,deflate,br”,
“接受语言”:“en-US,en;q=0.8,pt;q=0.6”,
“cookie”:“connect.sid=s%3A14363a00-6285-11e7-8c76-9366761bb151.1YG2B6GSLR8UJ7OCWLSHZDACMBC3XASI4%2BxVlRZ%2BXg”
}
//邮递员的要求,很好用!(??)
{
“主机”:“本地主机:8082”,
“连接”:“保持活动状态”,
“内容长度”:“57”,
“邮递员令牌”:“86a514cd-7c19-85ee-d831-3b032849d430”,
“缓存控制”:“无缓存”,
“来源”:“铬”-extension://fhbjgbiflinjbdggehcddcbncdddomop",
“用户代理”:“Mozilla/5.0(Macintosh;英特尔Mac OS X 10_11_6)AppleWebKit/537.36(KHTML,如Gecko)Chrome/59.0.3071.115 Safari/537.36”,
“应用令牌”:“我的项目应用令牌”,
“内容类型”:“应用程序/json;字符集=UTF-8”,
“接受”:“*/*”,
“接受编码”:“gzip,deflate,br”,
“接受语言”:“en-US,en;q=0.8,pt;q=0.6”,
“cookie”:“connect.sid=s%3AdUYMmy7KkcUF-tS9eHHbOTgNW4YrKx92.elK9FAP6kuZ3aazh8Z5X8m1lSZX%2BO4sIcex0LLD7JBQ”
}
//为了完整起见,这里是POST请求主体
{“电话”:“99999999999”,“电子邮件”:xxxxxx@xxxx.xxx.xx"}

任何能为我指明修复此崩溃或进一步调查的方法的想法都是非常受欢迎的

经过大量调试后,我决定用我能用的最野蛮的方式更新我所有的
npm
软件包:

  • 删除了我与
    rm-rf节点\u模块的所有依赖关系
  • 用我所有依赖项的确切版本更新了my
    package.json
    (无“插入符号”或“大于”)
  • 然后在clean项目上安装npm
应用程序的会话再次开始工作!
希望这个Q&A能帮助其他人通过这个奇怪的bug。

经过大量调试,我决定以最野蛮的方式更新我所有的
npm
软件包:

  • 删除了我与
    rm-rf节点\u模块的所有依赖关系
  • 用我所有依赖项的确切版本更新了my
    package.json
    (无“插入符号”或“大于”)
  • 然后在clean项目上安装npm
应用程序的会话再次开始工作! 希望这个问答能帮助其他人通过这个奇怪的错误