上半年接手离职同事留下的项目现在出现问题了,需要解决一下。这个项目呢 现在基本就不在开发了平时出现问题了我就解决维护一下,不会再做较大拓展开发。所以对这也是有好多不明白的地方。说实话node我是没学过的,自己也没看过一直在搞java的,这次出现问题就记录一下
一、问题产生位置及现象:
平台SqlServer数据库更新后出现,启动服务器发现平台登录不上去且不报正确还是错误信息就只打印:ERR_EMPTY_RESPONSE
二、排查步骤思路:
1、在程序中精确找到报错位置后发现是ajax请求登录响应出现的,没有进入success方法而是进入了error,紧接着在error方法中打印响应返回的数据
2、error中打印信息如下:
readyState处理状态为0表示:XMLHttpRequest对象还没有完成初始化,status状态同样也为0卧槽没遇到过啊,
3、找度娘为什么会出现readyState=0,status=0这种情况发现各种原因都有,大致总结下:
- 请求提交冲突:在进行提交的同时用form表单提交了一下又在点击确定按钮绑定点击事件进行了提交,两次提交冲突
- 跨域问题:请求出现跨域
- 数据格式出错
- ajax在调用之前,就已经取消了。也就是说根本没有调用这个ajax请求。
- url不存在或者 url不可到达
第一种请求提交冲突通过查看代码不存在这种情况,第二种请求跨域查看node服务端代码设置了允许跨域,剩下的三种情况应该也不会存在问题,因为出现登录不了的现象是SqlServer数据库更新后且更新前就可以登录的
4、在readyState=0,status=0上面寻找思路断了,换个思路继续,这次直接点直接找度娘为什么报ERR_EMPTY_RESPONSE
一番查找也是各种原因,大致总结如下:
- 前端参数涉及sql语句中关键字
- 在CMD窗口输入如下命令:
for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i 回车
for %i in(%windir%\system32\*.ocx) do regsvr32.exe /s %i 回车
命令执行完成后重启电脑即可。
- 浏览器出现内存不能读、写的提示让删除注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks
这个位置有一个正常的键值{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 将其他的删除。
- 更改DNS
- 更改hosts文件
- 后台请求(连接)数据库失败,导致后台一直没有给前台返回数据
第一种情况不存在传递参数没有涉及sql关键字,第二、三种情况没有进行尝试不懂命令是干嘛的害怕把服务器给搞得雪上加霜,第四、五种情况看了下电脑配置对着的,就剩最后一种情况了 测试一下呗
5、喝杯水撒泡尿还得接着搞,思路是这样的 在node后台登陆接口里面我不进行用户名和密码的校验了就是不用查数据库了,在请求到我接口后我就直接将请求参数给返回出去。哎、这么着你猜怎么着,请求成功了前台并且将打印出了请求参数。我去 这就舒服多了,这说明问题多半出现在了node后台和SqlServer数据库的交互上面。
6、排查node后台和SqlServer数据库之间哪里出了问题,先下载了一个可视化工具安装上连接数据库发现是可以的这说明数据库是可以访问的,这下把注意力放在后台上面主要去排查mssql模块及连接配置上面。查看了配置信息没有错是对的,就去看mssql模块,这下又找度娘发现mssql这里连接数据库并操作是莫有问题的,之后我还重新下载了mssql又试了下还是不行 完了 没招了
7、给之前同事微信上问了下,说让我在控制台看下打印信息都报什么错,因为是接收别人的代码且node也不是特别熟,所以一直不会查看node的打印信息。经过同事的知指导成功查看到node控制台的打印信息,没错就是后台报错说没有连接上数据库,给个图看下
8、因为程序在更新数据库之前一直是可以访问到数据库的,所以在6步哪里判断失误了(判断失误原因:想的是可视化工具都连接上数据库了那数据库应该没啥问题),应该直接查看数据库配置是否有问题的 同事直接说让看sql server 2005 full text search 服务是否启动,果然没有启动然后我去启动报错如下图:
9、果然是干啥都离不开度娘,我有找度娘解决sql server 2005 full text search 服务无法启动问题,解决方式如下:
- 打开注册表:运行输入:regedit 回车
- 展开注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msftesql$SQLSERVER
- DependOnService的键值:RPCSS NTLMSSP 改为:RPCSS
- 重启计算机
我先把注册表原先的值保存下了再去更改的,这样除了问题还可以恢复。
10、计算机重启后打开计算机管理中服务选项发现已经启动了,然后就高兴地登录平台,果然白高兴一场登录依旧报错。唉 喝杯水,决定还是把问题定位在数据库配置,这次打开Sql ServerConfiguration Manager就是sql server配置管理器一个一个去查看配置,果然还真的发现问题有个服务中的客户端协议里面的TCP/IP没有启动,在启动之后再次登录就可以了
如果有服务没有启动就有可能导致连接数据库失败,来张配置管理器所有服务的全家福吧
总结:
首先总结一下解决问题的思路发现问题------》定位问题-------》出现问题原因有哪些------》分析可能是那些原因------》逐一排查原因------》解决问题
其次反思解决问题的方法,在我解决这个问题后发现绕了大弯,明明是更新数据库后出现了登录不上去报错的问题为啥我还要在后台上花费时间去找错呢,应该有个比重例如:数据库错误率占80%,后台及前台程序占20%的比重去排查,且优先排查数据库方面具体为数据库配置、连接信息。如果这么做的话可能问题就不会花费这个大的力气了。所以还是自己定位问题的点不够准确和没有过多思考直接查看表面上报错上欠缺,吸取一下这个教训。
希望能给正在遇到这些问题的朋友有所帮助