关闭MongoDB数据库后请求返回0 Unknown Error而非404的问题咨询
关闭MongoDB数据库后请求返回0 Unknown Error而非404的问题咨询
嘿,我来帮你理清这个问题的来龙去脉,以及怎么解决它!
为什么会出现status 0而不是预期的404?
这本质上是网络连接失败和HTTP层错误的核心区别:
- 当你关掉MongoDB服务后,端口3000完全没有程序在监听请求。浏览器发起请求时,连最基础的TCP连接都建立不起来(对方完全不响应连接请求),这种情况根本不属于HTTP协议的范畴——HTTP状态码(比如404)是建立在TCP连接成功、服务器能正常返回HTTP响应的基础上的。
- 浏览器遇到这类「无法获取有效HTTP响应」的场景时,会统一用
status 0来标识,这类情况包括:连接超时、目标端口无服务监听、DNS解析失败等。你这里的问题和CORS配置无关(毕竟服务正常运行时CORS完全没问题),只是浏览器把这类无响应的情况归到了status 0的错误类别里。
为什么改端口到4200会得到404?
因为你的前端服务正运行在4200端口,浏览器发起请求时能成功建立TCP连接。前端开发服务器接收到请求后,发现没有对应的路由,于是返回了标准的404 HTTP响应——这时候属于正常的HTTP层错误,浏览器能正确获取到状态码。
怎么处理这个问题,让错误提示更准确?
你可以在modifyAndRethrow方法里针对status 0做特殊判断,把它映射成符合你场景的错误信息,比如:
private modifyAndRethrow(): (response: HttpErrorResponse) => ObservableInput<any> { return (response: HttpErrorResponse) => { const errorMsg = response.status === 0 ? "数据库服务未启动,请检查服务状态" : (response.error?.code as string || `${response.status}`); throw errorMsg; }; }
这样一来,当你关掉MongoDB测试错误处理时,UI就会显示更准确的提示,而不是模糊的「Unknown Error」了。
备注:内容来源于stack exchange,提问作者Otto Abnormalverbraucher
相关产品推荐
相关产品推荐

